之前因为经常出编程题,自己造数据,所以种类记录一下自己出数据的方法,涉及到简单的文件读取和随机数。
- 随机数
- 要取得[ a , b )的随机整数,使用( rand() % ( b - a ) ) + a ;
- 要取得[ a , b ]的随机整数,使用( rand() % ( b - a + 1 ) ) + a ;
- 要取得( a , b ]的随机整数,使用( rand() % ( b - a ) ) + a + 1;
- 需要用到时间种子srand(time(NULL)),不然会有伪随机数的问题。
- 下面一个简单的生成随机数的程序,一般用到rand和freopen就好了,简单改一改就可以达到想要的随机数。
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("1.in", "w", stdout);
srand(time(NULL));
int n = 20;
int m = 10;
for( int c = 0 ; c < 30 ; c++ ){
cout << n << " " << m << '\n';
for( int i = 0 ; i < m ; i++ ){
map<int , int>flag;
int num1 = 0;
int num2 = 0;
while(1){
bool f1 = false;
bool f2 = false;
num1 = ( rand() % ( n - 1 + 1 ) ) + 1;
num2 = ( rand() % ( n - 1 + 1 ) ) + 1;
if( !flag[num1] ){
flag[num1] = 1 ;
f1 = true;
}
if( !flag[num2] ){
flag[num2] = 1;
f2 = true;
}
if( f1 && f2 ){
cout << num1 << " " << num2 << '\n';
break;
}
}
}
}
return 0;
}
- 文件读取
- 用到的就是c++很简单的freopen
- freopen(“1.in”, “r”, stdin),从1.in读取数据作为输入,其中r表示读取,w表示写入
- 注意文件的位置,因为1.in和cpp文件同级所以相对路径可以直接写文件名。
- freopen(“1.out”, “w”, stdout),表示把自己代码的输出写入1.out文件中,同样注意文件位置。
- 一般将freopen放在主函数(main函数)一开始位置。
int main()
{
//表示从1.in读取数据作为输入,并将自己代码的运行结果作为输出保存到1.out
freopen("1.in", "r", stdin);
freopen("1.out", "w", stdout);
...
}