生成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
相关产品推荐
相关产品推荐

