You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:24:03