我的C++级数计算程序出了什么问题?被困了好几个星期

Whats wrong with my program on how to calculate the series C++? Been stuck for weeks

本文关键字:好几个 问题 什么 C++ 计算程序 我的      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main () {
int input {};
int sum {0};
int tsum {0};
cout << "Number: ";
cin >> input;
for (int i {1}; i <= input; i++) {
for (int j {1}; j <= input; j++) {
sum += j;
tsum += j;
cout << j;
if (j < i) {
cout << "+";
}
}
cout << " = " << tsum << endl;
}
cout << "Your sum is: " << sum << endl;
}

所以我在w3resources的循环练习中发现了这个问题,它希望我计算这个系列,例如:假设我的输入是2

它将被输出1=1

1+2=3

该系列的总和为4

我已经研究这个问题一个星期了,但我无法理解它,我甚至看了解决方案,但仍然不明白。有人能试着向我解释一下吗,因为这很令人沮丧。我确实理解我们需要一个嵌套循环来将两个数字相加,但如何求和+=j;并且tsum+=j适合这个方程?它不是只是1+1=2,1+2=3,然后2+1=3,2+2=4吗?那该如何让我找到解决方案?????以及你如何将"="与"+"结合起来?sum和tsum怎么不会是同一个数字,因为它们都在把j加到它的值上?

首先,您没有正确输入建议的解决方案代码。它呈现在这里。看看它与你发布的内容有何不同(我已经用// *** HERE ***:标记

#include <iostream>
using namespace std;
int main()
{
int i, j, n, sum = 0, tsum;
cout << "nn Find the sum of the series (1) + (1+2) + (1+2+3) + (1+2+3+4) + ... + (1+2+3+4+...+n):n";
cout << "------------------------------------------------------------------------------------------n";
cout << " Input the value for nth term: ";
cin >> n;
for (i = 1; i <= n; i++) 
{
tsum = 0;
for (j = 1; j <= i; j++) //*** HERE ***
{
sum += j;
tsum += j;
cout << j;
if (j < i) 
{
cout << "+";
}
}
cout << " = " << tsum << endl;
}
cout << " The sum of the above series is: " << sum << endl;
}

解决这个问题,锻炼更有意义。也就是说,你练习的目标是计算一个总和。给定一些自然数n,算法简单地为:

sum = 0;
for (i = 1 through n)
for (j = 1 through i)
sum = sum + j;

假设输入的数字是3。这意味着你正在计算

(1) + (1+2) + (1+2+3)

备选方案#1:重新分组

请注意,基于对以上序列中模式的识别,您可以对此进行许多优化。例如如果你这样重新排列号码:

(1+1+1) + (2+2) + (3)

你可以看到有n1、(n-1)2等,直到13。这种模式适用于您交付的任何n。因此,您可以这样做:

sum = 0
for (i = 1 through n)
sum = sum + (n - (i-1))*i;

备选方案#2:已知和

{1..n}上的自然数之和存在闭形式:

sum{1..n} = n*(n+1)/2

因此,我们可以消除内部循环,并简单地这样做:

sum = 0
for (i = 1 through n)
sum = sum + (i * (i+1))/2;

这个,以前的解决方案,或者两个循环的解决方案都将提供相同的结果。你选择哪一个取决于你。