我试图创建一个程序,按照特定的数字系列条件(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;
}
答案 0 :(得分:5)
你循环200次,每次循环,你打印出4个不同的数字。你也在开始时打印两次,这样就是2 + 4 * 200 = 802,这就是你的802号输出的来源。
答案 1 :(得分:1)
我假设是因为“for”循环中的代码,但我有几个小时 思考如何减少代码到工作,我想不到 还要别的吗。我很沮丧,需要你的帮助。
所以你基本上想简化你的代码。这可以通过注意重复来完成。
在那里你只能找到两种类型的变化;带有前一个元素的+2
或x2
。
在每次迭代中,这可以通过以下方式实现:
i%4 == 1
或i%4 == 3
,则需要增加2(假设为1 <= i <= MAX
)i%4 == 0
,只需乘以2。当你这样做时,你可以简单地忽略,打印前两个,以及系列中总数中的其他复杂情况。
同样不是这样,你试图获得这个系列的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