无数组/List场景下存储比较整数对、求最大相邻两数和问题
问题核心修正点
- 新增
maxSum变量存储历史最大分组和,初始值设为理论最小和-198(两个边界最小值-99相加的结果),避免负数和场景下的判断错误 - 新增
isFirstInput标记处理首次输入:第一个输入仅赋值给prev不参与求和,避免初始prev=0干扰第一个分组的计算 - 每次计算完相邻两数的和后,立刻和
maxSum比较更新,不需要存储所有历史和 - 循环终止时直接输出
maxSum即可得到结果
修正后完整代码
class Program { static void Main(string[] args) { const int MAX = 99; const int MIN = -99; const int TERMINATE_FLAG = 100; int current; int prev = 0; int sum; // 初始设为最小可能的和,避免漏算负数和 int maxSum = -198; // 标记是否是第一次输入 bool isFirstInput = true; do { current = Convert.ToInt32(Console.ReadLine()); // 超出范围就标记为终止值 if (current > MAX || current < MIN) { current = TERMINATE_FLAG; } if (current != TERMINATE_FLAG) { if (isFirstInput) { // 第一个输入只存prev,不计算和 prev = current; isFirstInput = false; } else { sum = prev + current; // 更新最大和 if (sum > maxSum) { maxSum = sum; } // 把当前值设为下一轮的prev prev = current; } } } while (current != TERMINATE_FLAG); // 输入至少有两个有效数的话输出最大和,可根据需求加空输入/单输入的兼容 Console.WriteLine("最大分组和为:" + maxSum); } }
逻辑验证
比如你举的输入例子7、5、3、2、9,计算过程为:
- 第一次输入7,仅赋值prev=7
- 输入5,和为12,maxSum=12,prev=5
- 输入3,和为8,maxSum保持12,prev=3
- 输入2,和为5,maxSum保持12,prev=2
- 输入9,和为11,maxSum保持12
- 输入超出范围的值终止,输出12,符合预期
内容的提问来源于stack exchange,提问作者Sexy Scorch
相关产品推荐
相关产品推荐

