Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมหาผลรวมของลำดับที่กำหนดใน C++


ในปัญหานี้ เราได้รับตัวเลขสองตัว n และ k สำหรับอนุกรมหนึ่ง งานของเราคือสร้างโปรแกรมเพื่อค้นหาผลรวมของลำดับที่กำหนดใน C++

ลำดับคือ −

(1*2*3*...*k) + (2*3*...k*(k+1)) + (3*4*...*k*k+1*k+2) + ((n-k+1)*(nk+
2)*... *(n-k+k).

คำอธิบายปัญหา − ที่นี่ เราจะหาผลรวมของอนุกรมที่กำหนดจนถึงเทอมที่ n ตามค่าที่กำหนดของ k

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

อินพุต

n = 4, k = 3

ผลลัพธ์

30

คำอธิบาย

Series: (1*2*3) + (2*3*4) = 30

แนวทางการแก้ปัญหา

วิธีแก้ปัญหาง่ายๆ คือการหาผลรวมโดยใช้การวนซ้ำ เราจะใช้สองลูป หนึ่งลูปสำหรับแต่ละเทอมและวินาทีเพื่อค้นหาค่าของเทอม แล้วบวกค่าของแต่ละเทอมเพื่อให้ได้ผลลัพธ์

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include <iostream>
using namespace std;
int findSeriesSum(int n, int k){
   int sumVal = 0, term = 1;
   for(int i = 1; i <= (n-k + 1); i++){
      term = 1;
      for(int j = i; j< (k+i); j++){
         term *= j;
      }
      sumVal += term;
   }
   return sumVal;
}
int main(){
   int n = 4, k = 3;
   cout<<"The sum of series is "<<findSeriesSum(n, k);
   return 0;
}

ผลลัพธ์

The sum of series is 30

โซลูชันนี้ไม่มีประสิทธิภาพเนื่องจากต้องการการวนซ้ำซ้อนที่ทำให้เวลาของลำดับ O(n 2 ซับซ้อน )

โซลูชันที่มีประสิทธิภาพ อาจจะใช้สูตรทั่วไปของอนุกรมก็ได้ สูตรคือ

$\frac{(\square+1)*\square*(\square-1)*(\square-2)*....*(\square-\square+1)}{\square+1}$

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include <iostream>
using namespace std;
int findSeriesSum(int n, int k){
   int sumVal = 1;
   for(int i = n+1; i > n-k; i--)
   sumVal *= i;
   sumVal /= (k + 1);
   return sumVal;
}
int main(){
   int n = 4, k = 3;
   cout<<"The sum of series is "<<findSeriesSum(n, k);
   return 0;
}

ผลลัพธ์

The sum of series is 30