我用C语言编了一个产生一组33选7彩票的程序。有点问题,求助

就是用一个数组,随即顺序产生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循环要改成下面这样:
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.
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-12
你这分析的什么底啊,完全不行。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网