【问题标题】:In c++, how do you find all consecutive composite numbers for in an integer using for loops?在 C++ 中,如何使用 for 循环找到整数中的所有连续合数?
【发布时间】:2018-03-24 22:49:57
【问题描述】:

我想在给定问题中找到的基本思想是这样的。我有一个名为 N 的整数变量,用户可以在其中输入一个值。

int main()
{
    int n;
    std::cin >> n;

然后从这一点开始,我创建了一个 for 循环,该循环复制了您通常如何确定所创建的整数是否确实是素数。但是,我要查找的不是该数字是否为素数,而是要查找从 2 到输入的数字的所有 composites。因此,如果输入为 10。我应该从给定范围内获得复合 4 6 8 9 10。 我确实知道首先要做的是创建一个这样的 for 循环

for (int i = 2; i <= 10; i++)

然后嵌套另一个带有条件的 for 循环,以测试给定范围内的每个数字是素数还是复合数。

for (int i = 2; i <= n; i++)
    {
        for (int j = 2; j <= i; j++)
        {
            if (i % j == 0)
            {
                std::cout << i << " ";
            }
        }
    }

但是,这种方法并没有真正削减它。在这种嵌套的 for 循环方法中真正发生的是一个以 2 3 2 4 5 2 开头的输出和一堆没有多大意义的数字。这种方法导致输出这个古怪的数字序列的原因是什么,我能做些什么来解决这个问题?

【问题讨论】:

    标签: c++ for-loop integer


    【解决方案1】:

    在你打印了一个合数之后,你希望内部的“for j”循环终止并且外部的“for i”循环前进,所以在std::cout之后添加break;。此外,您知道如果您让j == i 将任何数字视为复合数,因此将“for j”循环终止条件从j &lt;= i 更改为j &lt; ilink 工作代码....

    【讨论】:

    • 啊,有道理。我完全忘记了 break 语句。最后一件事我需要澄清一下。虽然我有所有的复合材料。我正在寻找的一件事是只输出连续的复合材料。所以不是 4 6 8 9 10。我得到 8 9 10。我知道我可以在整个算法中添加一个数组以使事情变得更容易,但可以说我只想输出连续上升的 8 9 10 组合?该怎么做呢?
    • 这有点模棱两可——如果n 是 16 岁,你会想要 8 9 10 14 15 16? (对于更简单的情况,除非所有结果都是连续的,否则您不会输出任何内容,您可以将结果 push_back 到 vector 中,然后在打印前检查连续性)。请参阅工作解决方案here。诀窍是将新复合材料与打印的最后一个复合材料进行比较,但通过确保打印每个连续组中的最后一个复合材料来进一步复杂......
    • 更一般地说,学习编程就是把这些东西弄明白......在寻求解决方案之前,你应该好好努力;-p。我建议也学习使用交互式调试器 - 你可以看到你的程序从哪里开始做不需要/意​​外的事情,并解释如何纠正它。
    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多