You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:40:40