1

我使用了下面的代码,但我的数字不正确,我的教练宁愿我使用 for 循环。它还需要打印出来:

“n”到“n”的和是“”(1到1的和是1)“n”到“n”的和是“”(1到2的和是3)

我试过使用 for 循环,但似乎无法正确打印出上面的代码。我迷路了!

#include "stdafx.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    const int NUM_LOOPS = 50;
    int count = 0;
    while (count < NUM_LOOPS)
    {
        cout << "Sum of 1 through " << count << " is " << (count * (++count)) / 2 << endl;
    }

    system("pause.exe");
    return 0;
}
4

4 回答 4

7

使用 for 循环,它看起来像这样:

for (int i = 1; i <= NUM_LOOPS; i++)
{
    cout << "Sum of 1 through " << i << " is " << i*(i+1)/2 << endl;
}

如果你愿意,你可以很容易地把它写在一个while循环中。

您的问题是您正在初始化count0而不是1. count想必是为了处理你在 long 中间修改的事实cout。运算符的评估<<相对于彼此是无序的,并且您的代码表现出未定义的行为,正如之前在这里多次讨论过的那样。

这样做的底线是,在最简单的表达式之外的任何事情中,前置和后置自增运算符都是危险的。谨慎使用。

于 2013-09-18T14:49:01.447 回答
3
for (int count = 1; count <= NUM_LOOPS; ++count)
{
    cout << "Sum of 1 through " << count << " is " 
         << (count * (count+1)) / 2 << endl;
}

不要将有趣的增量与数学公式混为一谈。你未来的生活会更幸福。

于 2013-09-18T14:49:58.890 回答
1

我认为这不是计算每个摘要的好方法。您当前只需要维护一个摘要,每次只需添加新值

因为多次操作会比一次添加花费更多的时间。

const int NUM_LOOPS = 50;
int count = 0, sum = 0;

while ( count < NUM_LOOPS )
  cout << "Sum of 1 through " << count << " is " << (sum+=(++count)) << endl;
于 2013-09-18T15:54:21.337 回答
0

我的例子是从 1 到 10

    int sum=0;
    for (int i = 1; i < 11; i++) {
        for (int j = 1; j <= i; j++) {
             cout << j;
             sum=sum+j;
            if(j != i){
                  cout << " + ";                     
            }
        }
        cout << " = " << sum;  
        sum=0;
       cout <<"\n";
    } 

输出是:

1 = 1

1 + 2 = 3

1 + 2 + 3 = 6

1 + 2 + 3 + 4 = 10

1 + 2 + 3 + 4 + 5 = 15

1 + 2 + 3 + 4 + 5 + 6 = 21

1 + 2 + 3 + 4 + 5 + 6 + 7 = 28

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

于 2015-02-09T12:12:28.407 回答