Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

계열의 합계 1 + (1+3) + (1+3+5) + (1+3+5+7) + ...... + (1+3+5+7+...+ (2n-1)) C++

<시간/>

이 문제에서는 숫자 n이 주어집니다. 우리의 임무는 1 + (1+3) + (1+3+5) + (1+3+5+7) + … + (1+3+ 시리즈의 합을 찾는 프로그램을 만드는 것입니다. 5+7+…+(2n-1)).

문제를 이해하기 위해 예를 들어 보겠습니다.

입력: n =5

출력: 55

그래서, 질문에 따르면 사용자가 우리에게 숫자 'n'을 주고 우리는 시리즈 1 + (1+3) + (1+3+5) + (1+3+5+7)을 추가해야 한다고 가정합니다. + … + (1+3+5+7+…+(2n-1)).

먼저 이 시리즈의 의미를 더 잘 이해합시다.

n=1을 취하면 급수가 1이 됩니다.

n=2를 취하면 마지막 항 2n-1의 값이 3을 초과하는 2 곱하기 2로 계산될 수 있기 때문에 급수가 1+(1+3)가 됩니다.

n 값
2n-1
시리즈는
1
1
1
2
3
1+ (1+3)
3
5
1+ (1+3) + (1+3+5)
4
7
1+ (1+3) + (1+3+5) + (1+3+5+7)

문제에 대한 해결책에 도달하면 두 가지 방법으로 해결할 수 있습니다. 하나는 총합의 표현을 얻을 수 있으므로 루프가 필요하지 않은 수학적입니다. 다른 하나는 코드에 두 개의 루프를 적용하는 것입니다.

루프를 사용한 직접 접근

1 + (1+3) + (1+3+5) + (1+3+5+7) + … + (1+3+5+7+… +(2n-1))은 시리즈 자체입니다. 따라서 우리는 중첩 루프를 사용할 것입니다. 외부 루프는 두 번째 항을 계산합니다. 동안 내부 루프는 용어 자체를 계산하는 데 사용됩니다.

예시

#include<stdio.h>

int calcSum(int n){
   int sum = 0;
   for (int i = 1; i <= n; i++) {
      // the first value of the term is always 1
      int value = 1;
      for (int j = 1; j <= i; j++) {
         sum += value;
         // next term
         value += 2;
      }
   }
   return sum;
}

int main(){
   int n = 35;
   printf("The sum of the series upto %d is %d ", n , calcSum(n));

}

출력

The sum of the series upto 35 is 14910

프로그램 작업:

  • 사용자가 n 값을 입력합니다. 2.
  • "sum"이라는 이름의 변수는 초기 값이 0으로 선언되었습니다.
  • i=1일 때 for 조건 i<=n은 true이므로 루프가 작동합니다.
    • 변수 "ft"의 값은 1입니다.
    • j의 첫 번째 값은 1입니다. j의 값이 1인 i의 값과 같기 때문에 조건은 참입니다. 따라서 j 루프가 작동합니다.
    • ft의 값이 합계에 추가됩니다. 따라서 합계는 1과 같은 0+1이 됩니다.
    • ft의 값이 수정되고 2만큼 증가하므로 새 값은 1+2 =3입니다.
    • j의 값은 1 증가하여 2가 됩니다.
    • 하지만 이제 for 루프 내부의 조건은 j>i와 같이 false입니다. 따라서 j 루프가 종료됩니다.
  • 이제 i의 값은 1씩 증가하여 2가 되므로 i=2이고 조건이 true인 i<=n이므로 루프에 들어갑니다.
    • 변수 "ft"의 값은 다시 1로 정의됩니다.
    • j의 값이 1일 때 루프는 j
    • ft의 값이 합계에 추가됩니다. 합계 값은 이미 1입니다. 따라서 합계의 새 값은 1+1 =2입니다.
    • ft의 값이 수정되고 2만큼 증가하므로 ft의 새 값은 1+2 =3이 됩니다.
    • j의 값은 1씩 증가하고 2가 됩니다. for 루프 조건은 j가 i와 같으므로 참입니다.
    • ft의 값이 합계에 추가됩니다. 합계 값은 이미 2입니다. 따라서 합계의 새 값은 2+3 =5입니다.
    • ft의 값이 수정되고 2만큼 증가하므로 ft의 새 값은 3+2 =5가 됩니다.
    • 루프 존재
  • 이제 i의 값은 1씩 증가하여 3이 되므로 i=3이고 조건이 false i<=n이므로 루프를 종료합니다.
  • 화면에 합계의 메시지와 값을 출력합니다.

수학 솔루션:

질문에 대한 수학적 솔루션을 찾은 다음 코드를 작성하면 코드가 크게 단순화됩니다.

일반 용어 Tn 시리즈의

계속 진행하기 전에 시리즈 1+3+5+7+9…..(2n-1)의 합이 n 2, 임을 알아야 합니다. 시리즈

1 2 +2 2 +3 2 +4 2 ….n 2 합계는 i 2 입니다. <갑> =

코드의 작동을 설명하는 프로그램

예시

#include<stdio.h>

int calcSum(int n){
   // required sum
   return (( (n) * (n + 1) * (2*n + 1 ) )/6 ) ;
}

int main(){
int n = 35;
   printf("The sum of the series upto %d is %d ", n , calcSum(n));

}

출력

The sum of the series upto 35 is 14910

위 코드의 작동:

예를 들어 사용자가 n의 값을 2로 입력하고 2n-1의 값이 3이고 계열이 1+(1+3)가 된다고 가정합니다.

하지만 코드를 통해 합을 이해하고 구해보자.

  • 함수 sum()은 값 2로 호출됩니다.
  • 함수는 의 값을 5로 계산하여 메인 함수로 반환합니다.
  • 답이 있는 메시지가 화면에 출력됩니다.