이 문제에서는 숫자 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로 계산하여 메인 함수로 반환합니다.
- 답이 있는 메시지가 화면에 출력됩니다.