如何避免C语言生成的数组内随机数出现重复?
问题解决方法
你当前的代码没有对新生成的随机数做单个数组内的重复校验,同时原有else分支逻辑完全无效:rand() % 49 + 1 的取值范围固定为1~49,永远不会触发判断条件,且j-1没有赋值给变量j,不会起到重试生成的作用。
去重实现逻辑
- 每次生成新的随机数后,先遍历数组中已经完成填充的前j个元素,判断当前随机数是否已经存在
- 如果随机数已存在,不递增数组下标j,重新生成随机数重试
- 如果随机数不存在,将其存入数组对应下标位置,继续填充下一个元素
修正后完整代码
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { printf("\n5.1 6选49彩票生成 \n\n"); int Ziehung[6]; srand((unsigned) time(0)); // 循环生成20组 for (int i=1; i<=20; i++) { printf("第%d组: ",i); // 填充单组的6个不重复数字 for (int j=0;j<=5;j++){ int Zufallszahl=(rand() % 49)+1; // 新增去重校验逻辑 int is_repeat = 0; for(int k=0;k<j;k++){ if(Ziehung[k] == Zufallszahl){ is_repeat = 1; break; } } // 如果重复,跳过后续逻辑,重新生成 if(is_repeat){ j--; // 抵消本次循环的j++,保证下标不变 continue; } // 不重复则存入数组并打印 Ziehung[j] = Zufallszahl; printf(" %d", Ziehung[j]); if(j != 5) printf(","); } printf("\n"); } return 0; }
内容的提问来源于stack exchange,提问作者0079x
相关产品推荐
相关产品推荐

