【问题标题】:Getting odd number between two number在两个数字之间获取奇数
【发布时间】:2022-11-04 09:21:47
【问题描述】:

规则是我需要显示用户输入的两个数字之间的奇数。

但是我的代码有问题。

例如当我输入:3 和 11 输出为 5 7 9 11

11 不应该包括在内,因为这是用户输入的,即使它是奇数。规则介于两者之间。 5 7 9 是我的目标。

我在想是因为我的公式还是我增加它的方式。

【问题讨论】:

  • 为什么选择使用while 循环,而更简单、更简单的方法是使用for 循环?
  • 您在if() 中的条件几乎是无稽之谈。再次检查 % 运算符的确切作用。
  • 哦,对不起..我忘了提到我应该只使用while循环..这是给我们的规则
  • 对于在调试器中单步执行、查看每个变量的值或添加大量打印语句来说,这是一个非常好的候选者。您只需要了解为什么您的第一个示例打印11,对吗?你可以在一张纸上算出来。当你知道为什么它打印了那个值,你就会知道要改变什么来阻止它。
  • 请不要通过破坏您的帖子来为其他人做更多的工作。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: c++


【解决方案1】:

如果您确保从第一个正确的数字开始,您可以完全跳过偶数,而不必担心排序。

int start = (numOne % 2 == 0) ? numOne + 1 : numOne + 2;
for (int i = start; i < numTwo; i += 2)
{
    cout << i << ' ';
} 

如果你必须使用while(这对于一个固定增量的循环是不合适的,你应该只为了让你的老师满意),

int i = (numOne % 2 == 0) ? numOne + 1 : numOne + 2;
while (i < numTwo)
{
    cout << i << ' ';
    i += 2;
} 

甚至

if (numOne % 2 == 0)
{
    numOne = numOne + 1;
}
else
{
    numOne = numOne + 2;
}
while (numOne < numTwo)
{
    cout << i << ' ';
    i += 2;
} 

【讨论】:

  • 也许int start = numOne + (numOne % 2 == 0) ? 1 : 2;
  • @Chris 我个人觉得这不太明显。我还考虑了int start = numOne + 1 + numOne % 2;,有些人可能更喜欢。
【解决方案2】:

如果在您开始之前增加numOne,您的第二次尝试将有效。

numOne++;

while (numOne < numTwo)
{
    if (numOne % 2 == 1 || numOne % 2 == -1)
    {
        cout << numOne << " ";
    }

    numOne++;
}

但是,您可能希望使用for 循环。

for (int i = numOne + 1; i < numTwo; i++) {
    if (i % 2 == 0) continue;

    cout << i << " ";
}

【讨论】:

    猜你喜欢
    • 2015-11-13
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多