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

C语言仅用int、if、while实现1-9无重复4位随机数问题求助

原有代码的问题

  • 逻辑运算符使用错误:判断新生成的数位是否和已有数位都不重复时,错误使用了逻辑或||,应该使用逻辑与&&。比如判断d3的条件写的是d3 != d1 || d3 != d2,这个条件永远为真:哪怕d3等于d1,d3 != d2也会满足,导致重复的数位也能通过校验。
  • 未处理d2和d1重复的场景:d2仅在进入while循环前生成一次,如果首次生成的d2和d1相等,while循环会一直空转,永远不会进入后续生成d3、d4的逻辑。
  • 变量未定义:random_4digit没有提前声明类型,直接赋值会触发编译错误。
  • 函数返回值不符合要求:函数声明为int类型,代码中没有return语句返回生成的四位数,反而直接在函数内打印结果,不符合函数的设计预期。

正确实现代码

按照你限定的语法规则,不需要用到数组结构,分别为每个数位设置独立的循环校验逻辑即可,示例如下:

int get_random_4digit() {
    int d1, d2, d3, d4, res;
    // 生成第一位1-9的数
    d1 = rand() % 9 + 1;
    // 生成第二位,直到和第一位不重复
    while(1) {
        d2 = rand() % 9 + 1;
        if(d2 != d1) break;
    }
    // 生成第三位,直到和前两位都不重复
    while(1) {
        d3 = rand() % 9 + 1;
        if(d3 != d1 && d3 != d2) break;
    }
    // 生成第四位,直到和前三位都不重复
    while(1) {
        d4 = rand() % 9 + 1;
        if(d4 != d1 && d4 != d2 && d4 != d3) break;
    }
    res = d1 * 1000 + d2 * 100 + d3 * 10 + d4;
    return res;
}

如果需要打印结果,可以在函数外接收返回值后打印,调用示例:

// 注意调用rand前需要先设置随机种子,比如srand((unsigned int)time(NULL));
int num = get_random_4digit();
printf("Random 4digit = %d\n", num);

内容的提问来源于stack exchange,提问作者Milton Niklasson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:24:00