打印给定第 n 项之和的程序


问题陈述包括打印级数的和,其中给出了第 N 项。

输入将给出 N 的值。我们需要找到序列直到 N 的和,其中序列的第 N 项由下式给出

$$\mathrm{N^{2}−(N−1)^{2}}$$

让我们通过以下示例了解问题

输入

N=5

输出

25

解释 - 给定的 N 值为 5。序列的前 5 项为

$\mathrm{N=1,1^{2}−(1−1)^{2}=1}$

$\mathrm{N=2,2^{2}−(2−1)^{2}=3}$

$\mathrm{N=3,3^{2}−(3−1)^{2}=5}$

$\mathrm{N=4,4^{2}−(4−1)^{2}=7}$

$\mathrm{N=5,5^{2}−(5−1)^{2}=9}$

直到第 5 项的序列项之和为 1+3+5+7+9=25。因此,输出为 25。

输入

N=8

输出

64

解释 - 使用序列第 N 项的公式计算直到第 8 项的序列和,

$\mathrm{N=1,1^{2}−(1−1)^{2}=1}$

$\mathrm{N=2,2^{2}−(2−1)^{2}=3}$

$\mathrm{N=3,3^{2}−(3−1)^{2}=5}$

$\mathrm{N=4,4^{2}−(4−1)^{2}=7}$

$\mathrm{N=5,5^{2}−(5−1)^{2}=9}$

$\mathrm{N=6,6^{2}−(6−1)^{2}=11}$

$\mathrm{N=7,7^{2}−(7−1)^{2}=13}$

$\mathrm{N=8,8^{2}−(8−1)^{2}=15}$

和将是 1+3+5+7+9+11+13+15=64,这是所需的输出。

让我们看看在 C++ 中解决问题的不同方法。

方法 1

该问题的朴素方法可以只是计算直到 N 的序列的每一项并将它们加起来以获得直到 N 的序列的和,其中序列的第 N 项为 $\mathrm{N^{2}−(N−1)^{2}}$

在 C++ 中实现该方法以获得直到 N 的序列和的步骤

  • 我们将创建一个函数来计算直到其第 N 项的序列的和,其中序列的每一项由 $\mathrm{N^{2}−(N−1)^{2}}$ 给出

  • 初始化一个变量来存储 N 项序列的和。该变量必须是 long long 数据类型,只是为了确保 N 值较大的和的值。

  • 在 for 循环中从 i=0 迭代到 i<=N 以计算 N 项序列的和。

  • 对于每次迭代,我们将使用公式 $\mathrm{N^{2}−(N−1)^{2}}$ 将第 i 项的和添加到变量中,因为它表示序列的第 N 项。

  • 迭代到 N 后返回变量,这将是前 N 项序列的和,其中 N 将是用户输入。

示例

//C++ code to find the sum of the sequence of first N terms where
//Nth term is given by N^2-(N-1)^2

#include <bits/stdc++.h>

using namespace std;

//function to calculate the sum of the sequence until N
long long sum(int N){
    
    long long a=0; //to store the sum of the sequence
    
    //iterating to calculate every term of the sequence from 1 to N
    for(int i=1;i<=N;i++){
        
        //using the formula N^2-(N-1)^2
        a = a + (i * i - (i-1)*(i-1)); //adding each term of the sequence until N
    }
    
    return a;
}

int main()
{
    int N;
    N=8; //input
    //calling the function
    cout<<"The sum of the sequence up to "<<N<<" terms is: "<<sum(N)<<endl;
    
    N=54;
    cout<<"The sum of the sequence up to "<<N<<" terms is: "<<sum(N)<<endl;

    return 0;
}

输出

The sum of the sequence up to 8 terms is: 64
The sum of the sequence up to 54 terms is: 2916

时间复杂度 - O(N),因为我们在 for 循环中迭代到 N 以计算序列的每一项并将其相加。

空间复杂度 - O(1),因为没有占用额外空间来查找和。

方法 2(高效方法)

除了使用序列第 N 项的公式同时计算序列的每一项并将其相加外,我们还可以使用算术级数 (A.P.) 的 N 项和的概念,因为序列正在形成一个 A.P。

如果我们使用序列第 N 项的公式,即 $\mathrm{N^{2}−(N−1)^{2}}$ 计算序列的前几项并观察模式,我们得到

序列的第一个数字是 1。

序列的第二个数字将是 3。

同样,$\mathrm{N=3,3^{2}−(3−1)^{2}=5}$

$\mathrm{N=4,4^{2}−(4−1)^{2}=7}$

$\mathrm{N=5,5^{2}−(5−1)^{2}=9}$

使用公式计算的序列的前几个数字是 1, 3, 5, 7, 9, 11, 13……

我们可以看到,该序列只是一个 A.P.,其第一项为 1,公差为 2。

A.P. 的前 N 项之和由下式给出:

$\mathrm{S_{N}=\frac{N}{2}(2*a+(N−1)d)}$,其中 a=AP 的第一项,d=AP 的公差。

要计算直到 N 项的序列和,我们将使用上述公式。替换值后,我们得到

$\mathrm{序列和=\frac{N}{2}(2*1+(N−1)2)\:as\:(a=1\:and\:d=2)}$

$$\mathrm{=\frac{2*N}{2}(1+N−1)=N^{2}}$$

直到第 N 项的序列和,其中第 N 项由 $\mathrm{N^{2}−(N−1)^{2}}$ 给出,等于 N 本身的平方,其中 N 是项数。

在 C++ 中实现该方法的步骤

  • 我们将创建一个函数来获取直到第 N 项的序列的和,其第 N 项为 $\mathrm{N^{2}−(N−1)^{2}}$

  • 初始化一个变量来存储序列的和,并将其中 N 的平方的值存储在其中,因为它给出了前 N 项序列的和。

  • 返回将是所需输出的变量。

示例

//C++ code to find the sum of the sequence of first N terms where
//Nth term is given by N^2-(N-1)^2

#include <bits/stdc++.h>

using namespace std;

//function to calculate the sum of the sequence until N terms
long long sum(int N){
    
    long long a=0; //to store the sum of the sequence
    
    a = N*N; //the formula to give the sum of sequence up to N terms
    
    return a;
}

int main()
{
    int N;
    N=75; //input
    
    //calling the function
    cout<<"The sum of the sequence up to "<<N<<" terms is: "<<sum(N)<<endl;
    
    N=1000;
    cout<<"The sum of the sequence up to "<<N<<" terms is: "<<sum(N)<<endl;

    return 0;
}

输出

The sum of the sequence up to 75 terms is: 5625
The sum of the sequence up to 1000 terms is: 1000000

时间复杂度 - O(1),花费恒定时间来计算序列的和。

空间复杂度 - O(1),因为没有占用额外空间。

结论

本文讨论了查找第 N 项为 $\mathrm{N^{2}−(N−1)^{2}}$ 的序列和的问题。我们讨论了用朴素的方法解决问题的方法,以及在恒定时间和空间内在 C++ 中找到直到 N 项的序列和的高效解决方案。

我希望您在阅读本文后能够理解问题和解决问题的方法。

更新于:2023年8月28日

228 次查看

开启您的职业生涯

完成课程获得认证

开始
广告