就是用一个数组,随即顺序产生7个数,然后存进数组,存的时候要判断是否和前面有的数重复。我为了验证逻辑是否正确就让他每产生一个数不管重复与否都会输出一次,并且标明是第几次产生这个位置上的数。但是我不知道应该在哪给计次数的n赋初值,现在程序输出是没有问题,但是偶尔n的次数会错,请老手指教。
#include <time.h>
#include <stdlib.h>
void main() {
int a[7];
int i, j, sum, n = 1; //n用来表示每个数产生了几次.
srand((unsigned)time(NULL));
a[0] = ((rand() % 33) + 1);
printf("第1个数第1次是%d\n",a[0]);
for(i = 0; i < 6; i++) {
a[i+1] = ((rand() % 33) + 1);
printf("第%d个数第%d次是%d\n",(i + 2),n,a[i+1]);
for(j = 0; j <= i; j++) {
if(a[i + 1] == a[j]) {
i--;
n++; //和前面的数重复,重新产生本数,n+1.
continue; //跳出本层循环
}
if (i == j) { //如果比到a[0]都不重复,n等于1. 等待下次计数。
n = 1;
}
}
}
//排序前的数。
/*for(i = 0; i < 7;i++) {
printf("%d ",a[i]);
}*/
printf("\n");
for(j = 0; j < 6;j++) {
for(i = 0; i < (6 - j);i++) {
if(a[i] > a[i+1]) {
sum = a[i+1];
a[i+1] = a[i];
a[i] = sum;
}
}
}
printf("\n本次彩票的中奖号码是:\n");
for(i = 0; i < 7;i++) {
printf("%d ",a[i]);
}
}
for(i = 0; i < 6; i++) {
a[i+1] = ((rand() % 33) + 1);
printf("第%d个数第%d次是%d\n",(i + 2),n,a[i+1]);
for(j = 0; j <= i; j++) {
if(a[i + 1] == a[j]) {
break; //跳出这层for 不循环完。
}
} //在 for 外面来判断有没有相同的。
if (i < j) { //如果比到a[0]都不重复,n等于1. 等待下次计数。
n = 1;
}
else
{
i--;
n++; //和前面的数重复,重新产生本数,n+1.
}
}