如何实现C++程序输出两个输入数字之间的奇数(不含边界)?
问题:输出两个数字之间的奇数(不含边界值)
需求明确:输出用户输入的两个数字之间的所有奇数,绝对不能包含输入的两个数字本身。举个例子,输入3和11时,正确结果应该是 5 7 9。
下面是两次失败的尝试及问题分析:
第一次错误尝试
代码如下:
#include <iostream> using namespace std; int main() { int numOne,numTwo; cout << "Please Enter First Number : "; cin >> numOne; cout << "Please Enter Second Number ( Should be greater than first number) : " ; cin >> numTwo; cout << "Odd Numbers Between are: "; while (numOne<numTwo) { numOne++; if ( numOne % 2 == 1) { cout<<numOne<<" "; } } return 0; }
问题:当numOne递增到10时,满足10<11的条件,执行numOne++后变成11,此时判断11是奇数并输出,导致右边界值11被包含进去,最终输出5 7 9 11。
第二次错误尝试
代码如下:
#include <iostream> using namespace std; int main() { int numOne, numTwo; cout << "Please Enter First Number : "; cin >> numOne; cout << "Please Enter Second Number ( Should be greater than first number) : " ; cin >> numTwo; cout << "Odd Numbers Between are: "; while (numOne<numTwo) { if ( numOne % 2 == 1) { cout<<numOne<<" "; } numOne++; } return 0; }
问题:循环一开始就判断初始的numOne(也就是输入的3)是否为奇数,3是奇数所以直接输出,导致左边界值3被包含进去,最终输出3 5 7 9。
正确实现方案
核心思路:遍历范围严格限定在numOne+1到numTwo-1之间,同时判断每个数是否为奇数。
方案一:基础修正版
#include <iostream> using namespace std; int main() { int numOne, numTwo; cout << "Please Enter First Number : "; cin >> numOne; cout << "Please Enter Second Number ( Should be greater than first number) : "; cin >> numTwo; cout << "Odd Numbers Between are: "; // 从numOne的下一个数开始,到numTwo的前一个数结束 int current = numOne + 1; while (current < numTwo) { if (current % 2 == 1) { cout << current << " "; } current++; } return 0; }
说明:用单独的current变量遍历,起始值设为numOne+1,循环条件current < numTwo确保不会触及右边界,完美避开两个输入值。
方案二:高效优化版
如果想减少循环次数,可以直接定位到第一个大于numOne的奇数,之后每次加2跳过偶数:
#include <iostream> using namespace std; int main() { int numOne, numTwo; cout << "Please Enter First Number : "; cin >> numOne; cout << "Please Enter Second Number ( Should be greater than first number) : "; cin >> numTwo; cout << "Odd Numbers Between are: "; // 找到第一个大于numOne的奇数 int current = numOne + 1; if (current % 2 == 0) { current++; } // 每次加2,直到小于numTwo while (current < numTwo) { cout << current << " "; current += 2; } return 0; }
说明:这种方式不需要每次判断奇偶,直接跳过偶数,效率更高,同时同样保证不会包含两个边界值。
内容的提问来源于stack exchange,提问作者Tamira Kienn
相关产品推荐
相关产品推荐

