如何用C++算术运算与if语句找出4个整数中的最大奇数
找4个整数中最大奇数的问题修复
问题分析
你写的代码逻辑缺陷在于:判断某个奇数为最大值时,要求它必须比**所有四个数(包括偶数)**都大。比如输入7、9、10、5时,9是最大奇数,但因为10是偶数且比9大,判断9的条件int2>int3(9>10)不成立,导致这个if分支不会执行,自然无法输出正确结果。
修复思路
我们需要调整判断逻辑:对于每个候选奇数,只要它比所有其他奇数都大即可,不需要和偶数比大小。换句话说,判断某个数是最大奇数的条件是:
- 该数本身是奇数;
- 对于其他每一个数,要么该数比它大,要么那个数是偶数(偶数不参与最大奇数的竞争)。
修改后的代码
#include <iostream> using namespace std; // 判断是否为奇数(返回true表示是奇数) bool isOdd(int x){ return x % 2 != 0; } int main(){ int int1, int2, int3, int4; cout << "Enter 4 integers" << endl; cin >> int1 >> int2 >> int3 >> int4; // 判断int1是否是最大奇数 if(isOdd(int1)){ bool isMax = true; if(isOdd(int2) && int2 > int1) isMax = false; if(isOdd(int3) && int3 > int1) isMax = false; if(isOdd(int4) && int4 > int1) isMax = false; if(isMax) cout << "The largest odd number is " << int1 << endl; } // 判断int2是否是最大奇数 if(isOdd(int2)){ bool isMax = true; if(isOdd(int1) && int1 > int2) isMax = false; if(isOdd(int3) && int3 > int2) isMax = false; if(isOdd(int4) && int4 > int2) isMax = false; if(isMax) cout << "The largest odd number is " << int2 << endl; } // 判断int3是否是最大奇数 if(isOdd(int3)){ bool isMax = true; if(isOdd(int1) && int1 > int3) isMax = false; if(isOdd(int2) && int2 > int3) isMax = false; if(isOdd(int4) && int4 > int3) isMax = false; if(isMax) cout << "The largest odd number is " << int3 << endl; } // 判断int4是否是最大奇数 if(isOdd(int4)){ bool isMax = true; if(isOdd(int1) && int1 > int4) isMax = false; if(isOdd(int2) && int2 > int4) isMax = false; if(isOdd(int3) && int3 > int4) isMax = false; if(isMax) cout << "The largest odd number is " << int4 << endl; } return 0; }
额外优化说明
- 把函数
evenor改名为isOdd,语义更清晰,同时简化了返回逻辑(直接返回x%2!=0); - 调整了代码结构,将头文件引用放在最前面,符合C++代码规范;
- 每个奇数的判断逻辑拆分为先标记为最大,再逐一和其他奇数比较,不符合就取消标记,逻辑更直观。
内容的提问来源于stack exchange,提问作者ML13C
相关产品推荐
相关产品推荐

