목표는 이렇게 만드는 것이다.
**수치는 검산을 위해 다 표기되게 만들었음. 깔끔하게 내고 싶으면 없어도 무방**
**내가 푼 문제는 1000000 이하의 피보나치 수열 짝수항의 합을 구하는 것이다**
여기서 잠깐. 피보나치 수열의 일반항을 구하는 방법은 없다. 따라서 약간의 조작이 필요한데, 피보나치 수열의 짝수항의 합은 정리해 보면 다음과 같다.
이렇게 된다. 따라서
을 차례대로 하는 것은 곧 피보나치 수열의 전체 합을 구하라는 것과 같은 의미란 것을 알 수 있다. 따라서 이는, 구하고자 하는 수열의 합이
라면, 이 문제를 풀면서 구해야 하는 값은
이 되는 것을 알 수 있다.
아래는 이를 토대로 한 코딩(나는 용이한 검산을 위해 printf 를 상당히 많이 사용하였다. 그러나 여기에 적을 때는 그럴 필요는 없겠지)
#include <stdio.h>
int main()
{
int i=1,j,sum_1=0,sum_2=0,sum_3=0,ansr;
sum_1 = 1+i;
ansr = 1+1+sum_1;//1+1
sum_2 = 1 + sum_1;
ansr = ansr + sum_2;
for(j=1;j<100;j++)
{
sum_3 = sum_1 + sum_2;
ansr = ansr + sum_3;
sum_1 = sum_2 + sum_3;
ansr = ansr + sum_1;
sum_2 = sum_1 + sum_3;
ansr = ansr + sum_2;
if(sum_1 > 1000000)
break;
else if(sum_2 > 1000000)
break;
else if(sum_3 > 1000000)
break;
}
printf("\n");
printf("답은 %d \n", ansr);
return 0;
}
for 문 안에서 수열이 순환될 수 있는 틀을 만들어 놓고, 그 이후는 자동적으로 계산되게 만들었다. 더 간단하게 만들 여지는 있을 것 같은데..... 잘 생각이 나질 않네......
C 언어 예제, 소인수분해 하기 (1) | 2013.08.15 |
---|---|
C 언어 예제, 순서쌍 a,b,c 구하기 (0) | 2013.08.14 |
C 언어 예제, 임의의 수 까지의 곱 (0) | 2013.08.14 |
C 언어 예제, 각 소수의 배수의 합 구하기 (0) | 2013.08.14 |
C 언어 예제, 별탑 쌓기 (0) | 2013.08.13 |
댓글 영역