C++线性搜索求数组最值:仅能输出最大值求助
排查C++数组最小值无法输出的问题
嘿,我来帮你捋捋这个问题!你已经搞定了最大值的查找,那最小值出问题大概率是初始化或者更新逻辑踩了常见的小坑,咱们一步步来排查:
初始化错误是重灾区
很多人会顺手把最小值初始成0或者一个很小的负数,但如果数组里全是正数,0就会比所有元素都小,直接导致结果错误。正确的做法应该和最大值初始化保持一致——用数组的第一个元素来初始化最小值:int min_val = arr[0]; // 别用int min_val = 0; 这种固定值!毕竟题目明确数组大小是300,肯定有合法元素可以用。
遍历更新逻辑漏写或写反
检查你遍历数组的循环里,是不是只处理了最大值的更新,完全漏掉了最小值的判断?或者把判断符号写反了?比如应该是arr[i] < min_val的时候更新,你写成了arr[i] > min_val?正确的双判断逻辑应该是这样:for (int i = 1; i < 300; ++i) { if (arr[i] > max_val) { max_val = arr[i]; } if (arr[i] < min_val) { // 这行是不是没写?或者符号错了? min_val = arr[i]; } }输出环节漏写变量
最后确认一下输出语句,是不是只打印了最大值,完全没把最小值的变量加进去?比如你是不是写了cout << max_val;,而正确的应该是cout << max_val << " " << min_val << endl;?别小看这种细节,有时候忙起来真会漏。输入环节的小疏漏(概率较低)
虽然你最大值能正确输出,但也可以快速检查下输入数组的循环是不是覆盖了所有300个元素——比如循环是不是从0到299,有没有少读或者多读?如果有元素没被正确赋值,可能会出现随机值干扰最小值的情况。
如果按照上面几点排查完还是有问题,可以把你初始化最小值和遍历更新的代码片段贴出来,这样能更精准定位问题~
内容的提问来源于stack exchange,提问作者kbg2o
相关产品推荐
相关产品推荐

