关于c ++

时间:2018-04-11 16:00:19

标签: c++ c++11 visual-c++

我试图创建一个程序,按照特定的数字系列条件(1-1-3-6-8-8-10-20)打印前200个元素但不显示仅200个元素我假设是因为" for"中的代码。循环,但我在思考如何减少代码到工作,我想不出任何其他事情。我感到沮丧,需要你的帮助。

练习在代码评论

//Print the following numerical series 1-1-3-6-8-8-10-20  until 200
#include <stdafx.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    int Num1=200, z = 0, x = 1, y = 1;

    cout << "\n\n1,";
    cout << " 1,";

    for (int i = 1; i <= Num1; i++)
    {
        z = y + 2;
        cout << " " << z << ","; //It will print 3
        z = z * 2;
        cout << " " << z << ",";//It will print 6
        z = z + 2;
        cout << " " << z << ",";//It will print 8
        z = z;
        cout << " " << z << ",";//It will print 8

        y = z;

    }

    cout << "\n\n";
    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:5)

你循环200次,每次循环,你打印出4个不同的数字。你也在开始时打印两次,这样就是2 + 4 * 200 = 802,这就是你的802号输出的来源。

答案 1 :(得分:1)

  

我假设是因为“for”循环中的代码,但我有几个小时   思考如何减少代码到工作,我想不到   还要别的吗。我很沮丧,需要你的帮助。

所以你基本上想简化你的代码。这可以通过注意重复来完成。 在那里你只能找到两种类型的变化;带有前一个元素的+2x2

在每次迭代中,这可以通过以下方式实现:

  1. 如果提醒i%4 == 1i%4 == 3,则需要增加2(假设为1 <= i <= MAX
  2. 如果提醒i%4 == 0,只需乘以2。
  3. 当你这样做时,你可以简单地忽略,打印前两个,以及系列中总数中的其他复杂情况。

    同样不是这样,你试图获得这个系列的200个术语,它在每个步骤中都会非常快速地增加并超过int的最大限制。因此,需要使用long long

    更新的代码如下所示:

    #include <iostream>
    typedef long long int int64;
    int main()
    {
        int size = 200;
        int64 z = -1;
    
        for (int i = 1; i <= size; i++)
        {
            if ((i % 4 == 1) || (i % 4 == 3))   z += 2;
            else if (i % 4 == 0)                z *= 2;
            std::cout << z << "\n";
        }
    
        return 0;
    }
    

    请参阅此处的输出:https://www.ideone.com/JiWB8W