C++ 打印给定第n个项的总和的程序
问题说明包括打印序列的总和,其中给出了第N个项。
输入中将给出N的值。我们需要找到序列的总和,其中序列的第N个项由以下公式给出:
N2−(N−1)2
让我们通过以下示例来理解这个问题:
输入
输出
解释 - 给定的N的值为5。序列的前5个项为:
N=1,12−(1−1)2=1
N=2,22−(2−1)2=3
N=3,32−(3−1)2=5
N=4,42−(4−1)2=7
N=5,52−(5−1)2=9
序列的前5个项的和为1+3+5+7+9=25。因此,输出为25。
输入
输出
说明 − 使用序列第 N 项的公式计算前 8 项的和,
N=1,12−(1−1)2=1
N=2,22−(2−1)2=3
N=3,32−(3−1)2=5
N=4,42−(4−1)2=7
N=5,52−(5−1)2=9
N=6,62−(6−1)2=11
N=7,72−(7−1)2=13
N=8,82−(8−1)2=15
和将为 1+3+5+7+9+11+13+15=64,这是所需的输出。
让我们看看在 C++ 中解决这个问题的不同方法。
方法 1
问题的朴素解决方法可能是计算直到 N 的序列中的每一项,并将它们相加以获得序列的和,其中序列的第 N 项是 N2−(N−1)2
实现方法来获得和直到 N 的序列的步骤:
- 我们将简单地创建一个函数来计算序列直到它的第 N 项的和,其中序列的每一项由 N2−(N−1)2 给出。
-
初始化一个变量来存储 N 项序列的和。该变量必须是 long long 数据类型,以确保对于较大的 N 值的 sum 的值。
-
在 for 循环中迭代 i=0 到 i<=N,以计算 N 项序列的和。
-
对于每次迭代,我们将使用公式 N2−(N−1)2 将第 i 项的和添加到变量中,因为它表示序列的第 N 项。
-
在迭代 N 次后,返回变量,它将是前 N 项序列的和,其中 N 是用户输入。
示例
输出
时间复杂度 − O(N),因为我们使用for循环迭代N次来计算序列的每一项并将它们相加。
空间复杂度 − O(1),因为没有使用额外的空间来计算总和。
方法−2(高效方法)
尽管可以使用序列第N项的公式同时计算序列的每个项并将它们相加,但由于该序列形成了等差数列(A.P.)的和的概念,我们可以使用求前N项等差数列和的方式来计算。
如果我们使用序列第N项的公式N2−(N−1)2计算序列的前几个数字并观察模式,我们得到
序列的第一个数字是1。
序列的第二个数字是3。
同样,
N=3,32−(3−1)2=5
N=4,42−(4−1)2=7
N=5,52−(5−1)2=9
使用公式计算的序列前几个数字是1, 3, 5, 7, 9, 11, 13……。
我们可以看出,该序列只是以1为首项,2为公差的等差数列。
等差数列前N项的和由以下公式给出,
SN=2N(2∗a+(N−1)d),其中a为等差数列的首项,d为等差数列的公差。
要计算序列的前N项之和,我们将使用以上公式。代入数值,我们得到
序列的和=2N(2∗1+(N−1)2):(其中a=1:和:d=2)
=22∗N(1+N−1)=N2
序列的和,直到第N项,其中N项由N2−(N−1)2给出,等于N的平方,其中N是项数。
在C++中实现该方法时,遵循以下步骤:
示例
输出
时间复杂度 − O(1),计算序列的和只需常数时间。
空间复杂度 − O(1),不需要额外空间。
结论
本文讨论了一个问题:找到第N个项为 N2−(N−1)2 的序列的和。我们讨论了解决这个问题的朴素方法,以及在C++中用常数时间和空间找到序列前N项和的高效解决方案。
希望您阅读本文后能够理解问题和解决问题的方法。