问题:简单的模拟产生双色球。
要求:用户可以输入要产生的组数,每组不能有重复数字。
代码:
解法一:
printf("请输入要产生的组数:\n");
int count = 0; //定义输入数字变量
scanf("%d",&count);
for (int num = 0;num<count; num++) {
int balls[] = {0,0,0,0,0,0,0}; //定义存放红球的随机数组
//用来产生六个随机数
for (int i = 0; i<6;i++) {
int temp = arc4random()%33+1;
balls[i] = temp;
//用来判断本次产生的数字和前面的是否相等
for(int j = 0;j<i;j++){
if (temp == balls[j]) {
// printf("有重复\n"); //此句可用来测试是否有重复
i--; //若有重复,则返回到上一次重新产生随机数
}
}
}
balls[6] = arc4random()%16+1; //定义数组中的第六个数字,产生蓝球
printf("红球:"); //打印出红球号码
for (int i= 0; i<6; i++) {
printf("%d\t",balls[i]);
}
printf("蓝球:"); //打印出蓝球号码
printf("%d\n",balls[6]);
}
解法二:
int red[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33};
int blue[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int length = sizeof(red)/sizeof(int);
int blueLength = sizeof(blue)/sizeof(int);
int num;
printf("请输入组数:");
scanf("%d",&num);
int i;
while (i<num) {
int r1 = arc4random() % length;
int r2 = arc4random() % length;
int r3 = arc4random() % length;
int r4 = arc4random() % length;
int r5 = arc4random() % length;
int r6 = arc4random() % length;
int blue = arc4random() % blueLength;
int a = red[r1];
int b = red[r2];
int c = red[r3];
int d = red[r4];
int e = red[r5];
int f = red[r6];
int g = red[blue];
if (!(a==b | a==c | a==d | a==e | a==f | a==g | b==c | b==d | b==e | b==f | b==g | c==d | c==e | c==f | c==g | d==e | d==f | d==g | e==f | e==g | f==g)) {
printf("红球:%d %d %d %d %d %d 蓝球:%d\n",a,b,c,d,e,f,g);
i++;
}
}