问题标题: 酷町堂:五年长久最新游戏典(浅谈随机数组生成)

21
11
已解决
吴庞茂旭
吴庞茂旭
资深光能
资深光能

1.rand()

rand() 生成随机数种子
	包含头文件:
		#include <cstdlib>
	形式:
		int __cdecl rand(void);
	常用用法:
		1. (l,r) rand()%(r-l+1)+l
		2. [l,r) rand()%(r-l)+(l+1)
		3. (l,r] rand()%(r-l)+l
		4. [l,r] rand()%(r-l-1)+(l+1)

2.srand()

srand(time(NULL)) 根据时间戳产生随机数
	包含头文件:
		#include <ctime>
	形式:
		  void __cdecl srand(unsigned int _Seed);
	常用用法:
		srand(time(NULL))

 

吴庞茂旭在2021-06-25 16:27:35追加了内容

更新rand

rand() 生成随机数种子
	包含头文件:
		#include <cstdlib>
	形式:
		int __cdecl rand(void);
	常用用法:
		l--左端点 r--右端点 
		( 或 ) 包括后面或前面的数
		[ 或 ] 不包括后面或前面的数
		如(l,r] 包括l但不包括r的区间
		1. (l,r) rand()%(r-l+1)+l
		2. [l,r) rand()%(r-l)+(l+1)
		3. (l,r] rand()%(r-l)+l
		4. [l,r] rand()%(r-l-1)+(l+1)

 

吴庞茂旭在2021-07-04 13:14:22追加了内容

谢谢老师对我的支持!

吴庞茂旭在2021-07-04 13:14:55追加了内容
system() 操作符指令
	包含头文件:
		#include <cstdlib>
	形式:
		int __cdecl system(const char *_Command);
	常用用法:
		1. 清屏:system("cls");
		2. 改变颜色:system("color 后景色前景色");
	16进制颜色对照谱:
	0=黑色,1=蓝色,2=绿色,3=湖蓝色,4=红色,5=紫色,6=黄色,7=白色,8=灰色,9=淡蓝色,A=淡绿色 B=浅绿色,C=淡红色,D=淡紫色,E=淡黄色,F=亮白色
		3. 改变标题:system("title 标题"); 
		4. 子文件图谱:system("tree");
		5. 运行程序:system("程序地址");
		6. 打开python编译器(有点奇怪但的确可以):system("python");
		7. 暂停程序:system("pause");
		8. 附录(大小写不需区分):
			ASSOC          显示或修改文件扩展名关联。
			ATTRIB         显示或更改文件属性。
			BREAK          设置或清除扩展式 CTRL+C 检查。
			BCDEDIT        设置启动数据库中的属性以控制启动加载。
			CACLS          显示或修改文件的访问控制列表(ACL)。
			CALL           从另一个批处理程序调用这一个。
			CD             显示当前目录的名称或将其更改。
			CHCP           显示或设置活动代码页数。
			CHDIR          显示当前目录的名称或将其更改。
			CHKDSK         检查磁盘并显示状态报告。
			CHKNTFS        显示或修改启动时间磁盘检查。
			CLS            清除屏幕。
			CMD            打开另一个 Windows 命令解释程序窗口。
			COLOR          设置默认控制台前景和背景颜色。
			COMP           比较两个或两套文件的内容。
			COMPACT        显示或更改 NTFS 分区上文件的压缩。
			CONVERT        将 FAT 卷转换成 NTFS。你不能转换当前驱动器。
			COPY           将至少一个文件复制到另一个位置。
			DATE           显示或设置日期。
			DEL            删除至少一个文件。
			DIR            显示一个目录中的文件和子目录。
			DISKPART       显示或配置磁盘分区属性。
			DOSKEY         编辑命令行、撤回 Windows 命令并创建宏。
			DRIVERQUERY    显示当前设备驱动程序状态和属性。
			ECHO           显示消息,或将命令回显打开或关闭。
			ENDLOCAL       结束批文件中环境更改的本地化。
			ERASE          删除一个或多个文件。
			EXIT           退出 CMD.EXE 程序(命令解释程序)。
			FC             比较两个文件或两个文件集并显示它们之间的不同。
			FIND           在一个或多个文件中搜索一个文本字符串。
			FINDSTR        在多个文件中搜索字符串。
			FOR            为一组文件中的每个文件运行一个指定的命令。
			FORMAT         格式化磁盘,以便用于 Windows。
			FSUTIL         显示或配置文件系统属性。
			FTYPE          显示或修改在文件扩展名关联中使用的文件类型。
			GOTO           将 Windows 、命令解释程序定向到批处理程序中某个带标签的行。
			GPRESULT       显示计算机或用户的组策略信息。
			GRAFTABL       使 Windows 在图形模式下显示扩展字符集。
			HELP           提供 Windows 命令的帮助信息。
			ICACLS         显示、修改、备份或还原文件和目录的 ACL。
			IF             在批处理程序中执行有条件的处理操作。
			LABEL          创建、更改或删除磁盘的卷标。
			MD             创建一个目录。
			MKDIR          创建一个目录。
			MKLINK         创建符号链接和硬链接
			MODE           配置系统设备。
			MORE           逐屏显示输出。
			MOVE           将一个或多个文件从一个目录移动到另一个目录。
			OPENFILES      显示远程用户为了文件共享而打开的文件。
			PATH           为可执行文件显示或设置搜索路径。
			PAUSE          暂停批处理文件的处理并显示消息。
			POPD           还原通过 PUSHD 保存的当前目录的上一个值。
			PRINT          打印一个文本文件。
			PROMPT         更改 Windows 命令提示。
			PUSHD          保存当前目录,然后对其进行更改。
			RD             删除目录。
			RECOVER        从损坏的或有缺陷的磁盘中恢复可读信息。
			REM            记录批处理文件或 CONFIG.SYS 中的注释(批注)。
			REN            重命名文件。
			RENAME         重命名文件。
			REPLACE        替换文件。
			RMDIR          删除目录。
			ROBOCOPY       复制文件和目录树的高级实用工具
			SET            显示、设置或删除 Windows 环境变量。
			SETLOCAL       开始本地化批处理文件中的环境更改。
			SC             显示或配置服务(后台进程)。
			SCHTASKS       安排在一台计算机上运行命令和程序。
			SHIFT          调整批处理文件中可替换参数的位置。
			SHUTDOWN       允许通过本地或远程方式正确关闭计算机。
			SORT           对输入排序。
			START          启动单独的窗口以运行指定的程序或命令。
			SUBST          将路径与驱动器号关联。
			SYSTEMINFO     显示计算机的特定属性和配置。
			TASKLIST       显示包括服务在内的所有当前运行的任务。
			TASKKILL       中止或停止正在运行的进程或应用程序。
			TIME           显示或设置系统时间。
			TITLE          设置 CMD.EXE 会话的窗口标题。
			TREE           以图形方式显示驱动程序或路径的目录结构。
			TYPE           显示文本文件的内容。
			VER            显示 Windows 的版本。
			VERIFY         告诉 Windows 是否进行验证,以确保文件正确写入磁盘。
			VOL            显示磁盘卷标和序列号。
			XCOPY          复制文件和目录树。
			WMIC           在交互式命令 shell 中显示 WMI 信息。

 

吴庞茂旭在2021-07-04 13:43:23追加了内容

3.system()

system() 操作符指令
	包含头文件:
		#include <cstdlib>
	形式:
		int __cdecl system(const char *_Command);
	常用用法:
		1. 清屏:system("cls");
		2. 改变颜色:system("color 后景色前景色");
	16进制颜色对照谱:
	0=黑色,1=蓝色,2=绿色,3=湖蓝色,4=红色,5=紫色,6=黄色,7=白色,8=灰色,9=淡蓝色,A=淡绿色 B=浅绿色,C=淡红色,D=淡紫色,E=淡黄色,F=亮白色
		3. 改变标题:system("title 标题"); 
		4. 子文件图谱:system("tree");
		5. 运行程序:system("程序地址");
		6. 打开python编译器(有点奇怪但的确可以):system("python");
		7. 暂停程序:system("pause");
		8. 附录(大小写不需区分):
			ASSOC          显示或修改文件扩展名关联。
			ATTRIB         显示或更改文件属性。
			BREAK          设置或清除扩展式 CTRL+C 检查。
			BCDEDIT        设置启动数据库中的属性以控制启动加载。
			CACLS          显示或修改文件的访问控制列表(ACL)。
			CALL           从另一个批处理程序调用这一个。
			CD             显示当前目录的名称或将其更改。
			CHCP           显示或设置活动代码页数。
			CHDIR          显示当前目录的名称或将其更改。
			CHKDSK         检查磁盘并显示状态报告。
			CHKNTFS        显示或修改启动时间磁盘检查。
			CLS            清除屏幕。
			CMD            打开另一个 Windows 命令解释程序窗口。
			COLOR          设置默认控制台前景和背景颜色。
			COMP           比较两个或两套文件的内容。
			COMPACT        显示或更改 NTFS 分区上文件的压缩。
			CONVERT        将 FAT 卷转换成 NTFS。你不能转换当前驱动器。
			COPY           将至少一个文件复制到另一个位置。
			DATE           显示或设置日期。
			DEL            删除至少一个文件。
			DIR            显示一个目录中的文件和子目录。
			DISKPART       显示或配置磁盘分区属性。
			DOSKEY         编辑命令行、撤回 Windows 命令并创建宏。
			DRIVERQUERY    显示当前设备驱动程序状态和属性。
			ECHO           显示消息,或将命令回显打开或关闭。
			ENDLOCAL       结束批文件中环境更改的本地化。
			ERASE          删除一个或多个文件。
			EXIT           退出 CMD.EXE 程序(命令解释程序)。
			FC             比较两个文件或两个文件集并显示它们之间的不同。
			FIND           在一个或多个文件中搜索一个文本字符串。
			FINDSTR        在多个文件中搜索字符串。
			FOR            为一组文件中的每个文件运行一个指定的命令。
			FORMAT         格式化磁盘,以便用于 Windows。
			FSUTIL         显示或配置文件系统属性。
			FTYPE          显示或修改在文件扩展名关联中使用的文件类型。
			GOTO           将 Windows 、命令解释程序定向到批处理程序中某个带标签的行。
			GPRESULT       显示计算机或用户的组策略信息。
			GRAFTABL       使 Windows 在图形模式下显示扩展字符集。
			HELP           提供 Windows 命令的帮助信息。
			ICACLS         显示、修改、备份或还原文件和目录的 ACL。
			IF             在批处理程序中执行有条件的处理操作。
			LABEL          创建、更改或删除磁盘的卷标。
			MD             创建一个目录。
			MKDIR          创建一个目录。
			MKLINK         创建符号链接和硬链接
			MODE           配置系统设备。
			MORE           逐屏显示输出。
			MOVE           将一个或多个文件从一个目录移动到另一个目录。
			OPENFILES      显示远程用户为了文件共享而打开的文件。
			PATH           为可执行文件显示或设置搜索路径。
			PAUSE          暂停批处理文件的处理并显示消息。
			POPD           还原通过 PUSHD 保存的当前目录的上一个值。
			PRINT          打印一个文本文件。
			PROMPT         更改 Windows 命令提示。
			PUSHD          保存当前目录,然后对其进行更改。
			RD             删除目录。
			RECOVER        从损坏的或有缺陷的磁盘中恢复可读信息。
			REM            记录批处理文件或 CONFIG.SYS 中的注释(批注)。
			REN            重命名文件。
			RENAME         重命名文件。
			REPLACE        替换文件。
			RMDIR          删除目录。
			ROBOCOPY       复制文件和目录树的高级实用工具
			SET            显示、设置或删除 Windows 环境变量。
			SETLOCAL       开始本地化批处理文件中的环境更改。
			SC             显示或配置服务(后台进程)。
			SCHTASKS       安排在一台计算机上运行命令和程序。
			SHIFT          调整批处理文件中可替换参数的位置。
			SHUTDOWN       允许通过本地或远程方式正确关闭计算机。
			SORT           对输入排序。
			START          启动单独的窗口以运行指定的程序或命令。
			SUBST          将路径与驱动器号关联。
			SYSTEMINFO     显示计算机的特定属性和配置。
			TASKLIST       显示包括服务在内的所有当前运行的任务。
			TASKKILL       中止或停止正在运行的进程或应用程序。
			TIME           显示或设置系统时间。
			TITLE          设置 CMD.EXE 会话的窗口标题。
			TREE           以图形方式显示驱动程序或路径的目录结构。
			TYPE           显示文本文件的内容。
			VER            显示 Windows 的版本。
			VERIFY         告诉 Windows 是否进行验证,以确保文件正确写入磁盘。
			VOL            显示磁盘卷标和序列号。
			XCOPY          复制文件和目录树。
			WMIC           在交互式命令 shell 中显示 WMI 信息。

 

吴庞茂旭在2021-07-05 19:51:23追加了内容

4.map(有些学过的大佬可以帮我补充补充)

map<下标类型,值类型> 数组名		伪桶(映射):		//可以用于数组过大的情况,但没有vector简单。该数据类型主要用于对譬如字符串类型等正常数组下标无法记录的数据类型的桶排序、记录
	包含头文件:
		#include <map>
	形式:
		template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >class map//这是一个类似int、string的类型名称
	常用用法:
		定义:map<key_type,value_type> book;//book为变量名,以下统一使用该变量名
		赋值:book[下标(与上key_type类型一致)]=值(与上value_type类型一致);
		遍历当中所有元素:
			map<int,bool>::iterator it;//迭代器
			for(it=book.begin();it!=book.end();it++){
				cout<<(*it).first<<" "<<(*it).second<<endl;
			}
			或者像桶:
			for(int i=mina;i<=maxn;i++){
				if(book[i]){
					cout<<i<<" ";
				}
			}
		桶中元素个数:book.size()

5.vector(有些学过的大佬可以帮我补充补充)

vector<值类型> 数组名	 向量://数组过大时,建议使用
	包含头文件:
		#include <vector> 或
		#include <queue>
	形式:
		template<typename _Alloc> class vector<bool, _Alloc> : protected _Bvector_base<_Alloc>//这是一个类似int、string的类型名称
	常用用法:
		定义:vector<vaule_type> a;//a为变量名,以下统一使用该变量名
		在a后面添加一个新的元素(常常用于图论当中的邻接表的建立,新手可略过,等后期学到图论或等游戏典词条“图论”更新后参阅游戏典中词条“图论”):a.push_back(值(与上value_type类型一致));
		更改值:a[下标(一定是int类型的,与正常数组没有区别)]=值(与上value_type类型一致);
		遍历当中所有元素:
			//与正常字符串类似
			for(int i=0;i<a.size();i++){//下标正常从0开始
				cout<<a[i]<<" ";
			}
		内部升序排序:
			//与正常字符串无异
			sort(a.begin(),a.end());

 

吴庞茂旭在2021-07-10 10:49:02追加了内容

6.【组合词条】暂停程序【方法汇总】:

【组合词条】暂停程序【方法汇总】:
	1. system("pause");
		包含头文件:
			#include <cstdlib>
		形式:
			system("pause");
		函数解释:
			控制台会要求使用者按下任意键继续,否则不会发生任何事,此时按下任何键皆可继续
		评价:
			※※
			可以满足游戏初级者的需要,但是高级码农很少会用这个函数,因为这会显示我们不需要的文字
	2. getchar();
		包含头文件:
			#include <cstdio>
		形式:
			getchar()
		函数解释:
			按下任意一个字符和一个换行即可继续程序
		评价:
			※※※
			这个函数搭配“变量=getchar()”使用十分方便,但是体验者会感到反感,因为需要不停地按字符和换行,降低体验感
	3. Sleep(时间(ms));
		包含头文件:
			#include <windows.h>
		形式:
			Sleep(以毫秒为单位的时间)
		函数解释:
			等待一段时间后继续执行
		评价:
			※※※
			这个函数可以不需要玩家按下键盘暂停程序,十分好用,大佬可以用来实现无字符暂停,但是windows函数在部分操作系统中无法调用,请谨慎使用!
	4. mySleep(时间(秒));
		包含头文件:
			#include <time.h>
			或
			#include <ctime>
		形式:
			void mySleep(int second) 
			{
				time_t start;
				start = time(NULL);
				while((time(NULL) - start) < second);
			}
		函数解释:
			等待一段时间后继续执行
		评价:
			※※※※
			这个函数可以不需要玩家按下键盘暂停程序,十分好用,大佬可以用来实现无字符暂停,任何操作系统均可实现,推荐使用!!!
	5. ???

欢迎大佬提供新素材!

吴庞茂旭在2021-07-29 15:05:12追加了内容
STL(截取版)
	以下文字截取自大佬赵逸凡
		map的迭代器最常用的用法是 
		it->first和it->second
		(*it).first和(*it).second速度可能没有上面快
		vector可以定义数组,如
		vector<edge> a[MAXN]
		求单源最短路时,常常先edge e=a[i][j],再取出e.x,e.y
		另外,set和vector常常用在一块儿
		还有很多stl的东西放在一块儿的
		struct edge{
			int a;
			double b;
			char c;
			float d;
		}
		stack< map<(long long),
		priority_queue<pair<edge,string> ,
		vector<pair<edge,string> >,
		greater<pair<edge,int> > > a;

 

吴庞茂旭在2021-07-29 15:06:10追加了内容

游戏典第一弹新鲜出炉啦!

rand() 生成随机数种子
	包含头文件:
		#include <cstdlib>
	形式:
		int __cdecl rand(void);
	常用用法:
		l--左端点 r--右端点 
		( 或 ) 不包括后面或前面的数
		[ 或 ] 包括后面或前面的数
		如(l,r] 包括l但不包括r的区间
		1. [l,r] rand()%(r-l+1)+l
		2. (l,r] rand()%(r-l)+(l+1)
		3. [l,r) rand()%(r-l)+l
		4. (l,r) rand()%(r-l-1)+(l+1)

srand(time(NULL)) 根据时间戳产生随机数
	包含头文件:
		#include <ctime>
	形式:
		  void __cdecl srand(unsigned int _Seed);
	常用用法:
		srand(time(NULL))
		
system() 操作符指令
	包含头文件:
		#include <cstdlib>
	形式:
		int __cdecl system(const char *_Command);
	常用用法:
		1. 清屏:system("cls");
		2. 改变颜色:system("color 后景色前景色");
	16进制颜色对照谱:
	0=黑色,1=蓝色,2=绿色,3=湖蓝色,4=红色,5=紫色,6=黄色,7=白色,8=灰色,9=淡蓝色,A=淡绿色 B=浅绿色,C=淡红色,D=淡紫色,E=淡黄色,F=亮白色
		3. 改变标题:system("title 标题"); 
		4. 子文件图谱:system("tree");
		5. 运行程序:system("程序地址");
		6. 打开python编译器(有点奇怪但的确可以):system("python");
		7. 暂停程序:system("pause");
		8. 附录(大小写不需区分):
			ASSOC          显示或修改文件扩展名关联。
			ATTRIB         显示或更改文件属性。
			BREAK          设置或清除扩展式 CTRL+C 检查。
			BCDEDIT        设置启动数据库中的属性以控制启动加载。
			CACLS          显示或修改文件的访问控制列表(ACL)。
			CALL           从另一个批处理程序调用这一个。
			CD             显示当前目录的名称或将其更改。
			CHCP           显示或设置活动代码页数。
			CHDIR          显示当前目录的名称或将其更改。
			CHKDSK         检查磁盘并显示状态报告。
			CHKNTFS        显示或修改启动时间磁盘检查。
			CLS            清除屏幕。
			CMD            打开另一个 Windows 命令解释程序窗口。
			COLOR          设置默认控制台前景和背景颜色。
			COMP           比较两个或两套文件的内容。
			COMPACT        显示或更改 NTFS 分区上文件的压缩。
			CONVERT        将 FAT 卷转换成 NTFS。你不能转换当前驱动器。
			COPY           将至少一个文件复制到另一个位置。
			DATE           显示或设置日期。
			DEL            删除至少一个文件。
			DIR            显示一个目录中的文件和子目录。
			DISKPART       显示或配置磁盘分区属性。
			DOSKEY         编辑命令行、撤回 Windows 命令并创建宏。
			DRIVERQUERY    显示当前设备驱动程序状态和属性。
			ECHO           显示消息,或将命令回显打开或关闭。
			ENDLOCAL       结束批文件中环境更改的本地化。
			ERASE          删除一个或多个文件。
			EXIT           退出 CMD.EXE 程序(命令解释程序)。
			FC             比较两个文件或两个文件集并显示它们之间的不同。
			FIND           在一个或多个文件中搜索一个文本字符串。
			FINDSTR        在多个文件中搜索字符串。
			FOR            为一组文件中的每个文件运行一个指定的命令。
			FORMAT         格式化磁盘,以便用于 Windows。
			FSUTIL         显示或配置文件系统属性。
			FTYPE          显示或修改在文件扩展名关联中使用的文件类型。
			GOTO           将 Windows 、命令解释程序定向到批处理程序中某个带标签的行。
			GPRESULT       显示计算机或用户的组策略信息。
			GRAFTABL       使 Windows 在图形模式下显示扩展字符集。
			HELP           提供 Windows 命令的帮助信息。
			ICACLS         显示、修改、备份或还原文件和目录的 ACL。
			IF             在批处理程序中执行有条件的处理操作。
			LABEL          创建、更改或删除磁盘的卷标。
			MD             创建一个目录。
			MKDIR          创建一个目录。
			MKLINK         创建符号链接和硬链接
			MODE           配置系统设备。
			MORE           逐屏显示输出。
			MOVE           将一个或多个文件从一个目录移动到另一个目录。
			OPENFILES      显示远程用户为了文件共享而打开的文件。
			PATH           为可执行文件显示或设置搜索路径。
			PAUSE          暂停批处理文件的处理并显示消息。
			POPD           还原通过 PUSHD 保存的当前目录的上一个值。
			PRINT          打印一个文本文件。
			PROMPT         更改 Windows 命令提示。
			PUSHD          保存当前目录,然后对其进行更改。
			RD             删除目录。
			RECOVER        从损坏的或有缺陷的磁盘中恢复可读信息。
			REM            记录批处理文件或 CONFIG.SYS 中的注释(批注)。
			REN            重命名文件。
			RENAME         重命名文件。
			REPLACE        替换文件。
			RMDIR          删除目录。
			ROBOCOPY       复制文件和目录树的高级实用工具
			SET            显示、设置或删除 Windows 环境变量。
			SETLOCAL       开始本地化批处理文件中的环境更改。
			SC             显示或配置服务(后台进程)。
			SCHTASKS       安排在一台计算机上运行命令和程序。
			SHIFT          调整批处理文件中可替换参数的位置。
			SHUTDOWN       允许通过本地或远程方式正确关闭计算机。
			SORT           对输入排序。
			START          启动单独的窗口以运行指定的程序或命令。
			SUBST          将路径与驱动器号关联。
			SYSTEMINFO     显示计算机的特定属性和配置。
			TASKLIST       显示包括服务在内的所有当前运行的任务。
			TASKKILL       中止或停止正在运行的进程或应用程序。
			TIME           显示或设置系统时间。
			TITLE          设置 CMD.EXE 会话的窗口标题。
			TREE           以图形方式显示驱动程序或路径的目录结构。
			TYPE           显示文本文件的内容。
			VER            显示 Windows 的版本。
			VERIFY         告诉 Windows 是否进行验证,以确保文件正确写入磁盘。
			VOL            显示磁盘卷标和序列号。
			XCOPY          复制文件和目录树。
			WMIC           在交互式命令 shell 中显示 WMI 信息。
			
map<下标类型,值类型> 数组名		伪桶(映射):		//可以用于数组过大的情况,但没有vector简单。该数据类型主要用于对譬如字符串类型等正常数组下标无法记录的数据类型的桶排序、记录
	包含头文件:
		#include <map>
	形式:
		template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >class map//这是一个类似int、string的类型名称
	常用用法:
		定义:map<key_type,value_type> book;//book为变量名,以下统一使用该变量名
		赋值:book[下标(与上key_type类型一致)]=值(与上value_type类型一致);
		遍历当中所有元素:
			map<int,bool>::iterator it;//迭代器
			for(it=book.begin();it!=book.end();it++){
				cout<<(*it).first<<" "<<(*it).second<<endl;
			}
			或者像桶:
			for(int i=mina;i<=maxn;i++){
				if(book[i]){
					cout<<i<<" ";
				}
			}
		桶中元素个数:book.size()
vector<值类型> 数组名	 向量://数组过大时,建议使用
	包含头文件:
		#include <vector> 或
		#include <queue>
	形式:
		template<typename _Alloc> class vector<bool, _Alloc> : protected _Bvector_base<_Alloc>//这是一个类似int、string的类型名称
	常用用法:
		定义:vector<vaule_type> a;//a为变量名,以下统一使用该变量名
		在a后面添加一个新的元素(常常用于图论当中的邻接表的建立,新手可略过,等后期学到图论或等游戏典词条“图论”更新后参阅游戏典中词条“图论”):a.push_back(值(与上value_type类型一致));
		更改值:a[下标(一定是int类型的,与正常数组没有区别)]=值(与上value_type类型一致);
		遍历当中所有元素:
			//与正常字符串类似
			for(int i=0;i<a.size();i++){//下标正常从0开始
				cout<<a[i]<<" ";
			}
		内部升序排序:
			//与正常字符串无异
			sort(a.begin(),a.end());
			
【组合词条】暂停程序【方法汇总】:
	1. system("pause");
		包含头文件:
			#include <cstdlib>
		形式:
			system("pause");
		函数解释:
			控制台会要求使用者按下任意键继续,否则不会发生任何事,此时按下任何键皆可继续
		评价:
			※※
			可以满足游戏初级者的需要,但是高级码农很少会用这个函数,因为这会显示我们不需要的文字
	2. getchar();
		包含头文件:
			#include <cstdio>
		形式:
			getchar()
		函数解释:
			按下任意一个字符和一个换行即可继续程序
		评价:
			※※※
			这个函数搭配“变量=getchar()”使用十分方便,但是体验者会感到反感,因为需要不停地按字符和换行,降低体验感
	3. Sleep(时间(ms));
		包含头文件:
			#include <windows.h>
		形式:
			Sleep(以毫秒为单位的时间)
		函数解释:
			等待一段时间后继续执行
		评价:
			※※※
			这个函数可以不需要玩家按下键盘暂停程序,十分好用,大佬可以用来实现无字符暂停,但是windows函数在部分操作系统中无法调用,请谨慎使用!
	4. mySleep(时间(秒));
		包含头文件:
			#include <time.h>
			或
			#include <ctime>
		形式:
			void mySleep(int second) 
			{
				time_t start;
				start = time(NULL);
				while((time(NULL) - start) < second);
			}
		函数解释:
			等待一段时间后继续执行
		评价:
			※※※※
			这个函数可以不需要玩家按下键盘暂停程序,十分好用,大佬可以用来实现无字符暂停,任何操作系统均可实现,推荐使用!!!
	5. ???

STL(截取版)
	以下文字截取自大佬赵逸凡
		map的迭代器最常用的用法是 
		it->first和it->second
		(*it).first和(*it).second速度可能没有上面快
		vector可以定义数组,如
		vector<edge> a[MAXN]
		求单源最短路时,常常先edge e=a[i][j],再取出e.x,e.y
		另外,set和vector常常用在一块儿
		还有很多stl的东西放在一块儿的
		struct edge{
			int a;
			double b;
			char c;
			float d;
		}
		stack< map<(long long),
		priority_queue<pair<edge,string> ,
		vector<pair<edge,string> >,
		greater<pair<edge,int> > > a;

 

吴庞茂旭在2021-08-14 15:27:53追加了内容
最近我在录一些题目来玩,但是我发现了一个十分严重的问题:测试点!
真的,一个1000多个数字的测试点不仅要生成还要打乱,很烦,所以我就想了,能不能写一个算法随机打乱一个函数呢?
无根树。
是的,就是它!
开giao!
代码简单易懂,注释恰到好处,时间复杂度可以忍受,我给我的评价是:满分!我怎么这么天才!

//exam_KeyUpsetAlgorithm
/*
*算法理论:
*	对于一棵无根树,令任何一个结点为根都会行程一棵全新的、随机的树。重复此过程,令每一棵长度>1的子树达到随
*	机,(不一定是二叉树,但最大度数一定在[2,树的结点数/2]的区间内)返**来之后,形成的树是一个随机的,则
*	该树产生的生成数组也是一个随机的。 	
*伪代码:
*	对于每次生成根结点:
*		root<-(-INF)
*		如果root在树中出现过或者非法或者root还未生成 
*			root<-rand(1,n) //可以优化为rand(l,r)
*		num<-rand(2,n/2) //n表示树的结点数 
*		a[++cnt]=g[root] //a表示生成数组,cnt表示当前点的位置,g表示第i个位置表示的值是什么 
*		循环num次,继续生成num个子树
*时间复杂度估计:
*	耗时部分:
*		1.产生root,最坏为n
*		2.产生子树,最坏为n/2
*		3.枚举每个生成的根结点,时间为n
*	综上考虑:	保守估计:	O(2*n^2+n^2)
*				大致为:	O(n^2)
*产生随机数组数量估计:
*	对于每一个点,都可能产生n+1种选择,但是由于是一个整体,所以是一个近似(n+1)!的数量 
*/
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <map>
#define INF (0x3f3f3f3f)
#define MAXN 1005
using namespace std;
typedef int t1;
int n,m,cnt;
map<t1,int> book;
int a[MAXN],g[MAXN];
void KeyUpsetAlgorithm(){
	if(n==0)return ;
	int root=-INF;
	while(root==-INF||!book[g[root]]){
		root=rand()%m+1;
	}
	a[++cnt]=g[root];
	book[g[root]]--;
	n--;if(n==0){return ;}
	int num=rand()%n+1;
//	cout<<"将根结点定为"<<root<<",生成"<<num<<"个子树,现在"<<g[root]<<"还剩"<<book[root]<<"个\n"; 
	for(int i=1;i<=num&&n!=0;i++){
		KeyUpsetAlgorithm();
	}
}
int main(){
	srand(time(NULL));//令随机数按照时间**生成
	while(cin>>g[++n])book[g[n]]++;
	n--;
	m=n;
	KeyUpsetAlgorithm();
	for(int i=1;i<=cnt;i++){
		cout<<a[i]<<" ";
	} 
	return 0;
}
我先在洛谷试了一个水,结果一个红名对我说:

我去,我岂不是白写了?后来才安**自己:你已经很NB了,在没有他人帮助的前提下写出了如此NB的代码。
害,白花了我一个多小时的时间……

七夕快乐,孤寡孤寡!


2
已采纳
曹灿阳
曹灿阳
初级天翼
初级天翼

(l,r) [l,r) (l,r] [l,r]分别是什么意思?

其实srand(time(NULL))最好写成srand(time(0))

谢谢大佬提供代码!

3
王文博
王文博
缔造者之神
缔造者之神

点赞+收藏已经完成了

1
1
沙宸安
沙宸安
中级启示者
中级启示者

@曹灿阳 左括号右括号是指包不包括左右端点的意思啦。

比如[l,r)就是左闭右开啦

0
吴庞茂旭
吴庞茂旭
资深光能
资深光能

都来了不点个赞再走吗?

0
0
0
赵逸凡
赵逸凡
初级启示者
初级启示者

map的迭代器最常用的用法是 

it->first和it->second

(*it).first和(*it).second速度可能没有上面快

vector可以定义数组,如

vector<edge> a[MAXN]

求单源最短路时,常常先edge e=a[i][j],再取出e.x,e.y

另外,set和vector常常用在一块儿

还有很多stl的东西放在一块儿的

struct edge
{
    int a;
    double b;
    char c;
    float d;
}
stack< map<(long long),priority_queue<pair<edge,string> ,vector<pair<edge,string> >, greater<pair<edge,int> > > a;

 

0
0
0
0
0
0
0
0
我要回答