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

生成20元素随机数组查找最小值,结果始终固定,求问题排查

问题分析与解决

嘿,我来帮你拆解下为什么会出现固定结果,以及怎么修正你的代码:

1. 随机数种子的坑

你用srand(clock())初始化随机数生成器,但clock()返回的是程序启动后消耗的CPU时钟周期。程序刚启动时,这个值特别小而且几乎没变化(因为代码跑到srand的速度太快了),导致每次运行程序的随机数种子几乎一样,生成的随机数序列自然也差不多,所以你看到的最小值总是那几个固定数。

2. 最小值查找逻辑完全错了

你的minimum函数根本不是在找数组的最小值——它是从o=0开始,挨个检查这个数有没有出现在数组里,找到第一个存在的就返回。这其实是在找数组里最小的那个非负整数元素,而不是数组元素中的最小值。加上前面随机数序列固定,这个“第一个匹配的小数”当然也固定了。


修正后的代码

我把两个问题都修好了,你可以直接用:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

// 正确的最小值查找:遍历数组找最小元素
int minimum(int zahlen[], int size) {
    int min_val = zahlen[0];
    for (int p = 1; p < size; p++) {
        if (zahlen[p] < min_val) {
            min_val = zahlen[p];
        }
    }
    return min_val;
}

int main() {
    // 用当前系统时间当种子,保证每次运行随机数不一样
    srand(time(nullptr));
    const int ARRAY_SIZE = 20;
    int array[ARRAY_SIZE];
    
    // 生成20个随机数
    for (int i = 0; i < ARRAY_SIZE; i++) {
        array[i] = rand();
    }
    
    // 输出最小值
    cout << "Die kleinste Zufallszahl die erstellt wurde ist die: " << minimum(array, ARRAY_SIZE) << endl;
    system("PAUSE");
    return 0;
}

关键修改点

  • 随机数种子替换:把srand(clock())换成srand(time(nullptr)),用当前时间(秒级)当种子,每次运行的种子都不同,随机数序列也就不一样了。
  • 修复最小值函数:重新写了minimum函数,它会遍历整个数组,逐个比较元素大小,真正找到数组里的最小值。还加了数组大小参数,避免硬编码20,让函数更灵活。
  • 规范main函数:C++里main必须返回int,不能是void,所以改成了int main()并加了return 0;,符合标准。

现在你再运行程序,每次都会得到不同的随机数数组,而且能正确输出真正的最小值啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:18:14