连续数组/股价差值超2统计函数异常排查(编译无错返回0)
问题分析与修正方案
嘿,我瞅了下你的代码,问题其实挺明显的,咱们一步步来捋清楚为啥结果一直是0:
核心问题点
- 条件判断完全写错了:你要统计的是差值超过2美元,但代码里写的是
arr[j] - arr[k] == 2——这只会匹配差值刚好等于2的情况,而且没考虑价格下跌时差值为负的场景,应该用绝对值判断abs(arr[j] - arr[k]) > 2。 - 循环变量没更新:你的while循环里,j和k一直停留在初始的0和1,根本不会往后遍历数组的其他元素,这就导致循环只检查第一对元素,之后就一直重复判断同一组值,自然统计不到符合条件的天数。
- 冗余逻辑:
j != k这个判断完全没必要,因为你本来就是要比较相邻的两个不同元素,这个条件纯粹多此一举。
修正后的代码
我给你调整了代码逻辑,用更直观的for循环遍历相邻元素,同时修正了判断条件:
#include <iostream> #include <cstdlib> // 用于abs函数计算绝对值 using namespace std; int main() { int arr[] = {1, 8, 30, 40, 100}; int size = sizeof(arr)/sizeof(arr[0]); int chg = 0; // 用于统计符合条件的天数 // 遍历数组中每一对相邻元素 for (int i = 0; i < size - 1; i++) { // 计算两日价格差的绝对值,判断是否超过2美元 if (abs(arr[i] - arr[i+1]) > 2) { chg++; } } cout << "连续两日股票价格差值超2美元的天数:" << chg << endl; return 0; }
代码说明
- 用
for循环遍历从第0个元素到倒数第2个元素,每次和下一个元素(i+1)比较,这样能覆盖所有连续两日的价格组合。 - 用
abs()函数取差值的绝对值,不管是价格上涨还是下跌,只要幅度超过2美元就算入统计。 - 去掉了多余的
j和k变量,让逻辑更简洁易懂。
测试你提供的示例数组,结果会是4(四组相邻元素的差值都超过2),完全符合预期。
内容的提问来源于stack exchange,提问作者OAC234
相关产品推荐
相关产品推荐

