需求:

  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;
}