需求:
1000个整数,其中85%取值2或者3,其他的随机分布在1到7之间。
想法:
1.首先,随机产生1000个0~1000的随机数,假设为数组x,将x赋值给y。
2.接着将y中不大于x[850]的值,赋值为随机产生的2或3
3.然后将不小于x[850]的值赋值为1,4,5,6,7。
关键代码:
for (int i=1; i<=num; i++) { if(y[i]<=x[850]&&num1<850) { y[i]=rand()%MAX2+2; num1++; } else { //2.如何得到值为1,4,5,6,7 y[i]=rand()%MAX1+1;//得到随机数1~5 if(y[i]>1)y[i]=y[i]+2;//如果大于1。将2~5换到4~7 } }
完整代码:
#include <fstream> #include <iostream> #include<stdlib.h> #include<algorithm> #include <time.h> using namespace std; #define MAX 1000 #define MAX1 5 #define MAX2 2 #define num 1000 int main(int argc, char* argv[]) { srand((unsigned)time(NULL)); //srand()函数产生一个以当前时间开始的随机种子 ofstream file2; file2.open("C:\\Users\\XDJ\\Desktop\\1.txt");//以输入方式打开文件 int x[num+1]; int y[num+1]; for (int i=1; i<=num; i++) { x[i]=rand()%MAX+1;//MAX为最大值,其随机域为0~MAX-1 y[i]=x[i]; } sort(x+1,x+num+1); int num1=0; for (int i=1; i<=num; i++) { if(y[i]<=x[850]&&num1<850) { y[i]=rand()%MAX2+2; num1++; } else { //2.如何得到值为1,4,5,6,7 y[i]=rand()%MAX1+1;//得到随机数1~5 if(y[i]>1)y[i]=y[i]+2;//如果大于1。将2~5换到4~7 } } for (int i=1; i<=num; i++) file2<<i<<"\t"<<y[i]<<endl; file2.close(); return 0; }