实现功能
请你设计一个随机分组程序,总共17个人(编号从1到17),随机分为13组,每组至少1人。
思路
范围为1-17,产生17个随机数,然后将17个随机数顺序分到13个组中,也就是17个随机数的后四位和前四位同时输出。这样就实现了分13个组,每组至少1人。因为产生的随机数,所以保证了每次分组,每组的人都不同。
关键功能
因为c++中没有像python、Java等程序语言中产生随机数函数,所以这里用到了srand
函数
函数说明
因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。
用法1
为了产生不可预见的随机序列,使用srand((unsign)(time(NULL))
具体代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int arr1[17],arr2[13],arr3[4],f,t=0,n=0;
srand((unsigned)time(NULL)); //利用时钟功能每次产生不同的随机数
for(int i=0;i<17;i++){
arr1[i]=1+rand()%17; //产生1-17范围内的17个随机数
f=0;
for(int j=0;j<i;j++){
if(arr1[i]==arr1[j]){
i--;
f=1; //有元素相同f=1 然后跳出循环重新开始
break;
}
}
if(f==0){ //没有元素相等
if(i<13){
arr2[t]=arr1[i]; //将前13个随机数赋给arr2
t++;
}else{
arr3[n]=arr1[i]; //将后4个随机数赋给arr3
n++;
}
}
}
for(int i=0;i<13;i++){
if(i<4){
cout<<"第"<<i+1<<"组"<<arr2[i]<<" "<<arr3[i]<<endl;//将arr2和arr3前4个元素同时输出
}else{
cout<<"第"<<i+1<<"组"<<arr2[i]<<" "<<endl;//将arr2第五个开始的所有随机数输出
}
}
return 0;
}