반응형
문제
피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다.짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?
코드
#include <stdio.h>
int main(void)
{
int a1 = 0, a2 = 1, a3=0; // 첫 번째, 일반항, 두 번째 일반항, 세 번째 일반항
int sum=0; //피보나치수열의 합을 누적할 변수
while(a3<=4000000)
{
a3 = a1 + a2;
a1 = a2;
a2 = a3;
if(a3%2==0) //a3가 짝수이면
sum += a3; //짝수항을 누적하여 더한다
}
printf("%d\n", sum);
return 0;
}
우선 초항과 둘 째항을 지정하여 $a1$에 $0$, $a2$에 $1$을 대입했다.
loop1)
$a3$에 $a1$과 $a2$를 더한 값을 대입하면 $1$이 되고,
$a2$의 값을 $a1$에 대입하면 $a1==1$이 된다.
$a3$의 값을 $a2$에 대입하면 $a2==1$이 된다.
loop2)
$a3$에 $a1$과 $a2$를 더한 값을 대입하면 $2$이 되고,
$a2$의 값을 $a1$에 대입하면 $a1==1$이 된다.
$a3$의 값을 $a2$에 대입하면 $a2==2$이 된다.
loop3)
$a3$에 $a1$과 $a2$를 더한 값을 대입하면 $3$이 되고,
$a2$의 값을 $a1$에 대입하면 $a1==2$이 된다.
$a3$의 값을 $a2$에 대입하면 $a2==3$이 된다.
이렇게 피보나치 수열이 이어지게 된다.
돌고돌긴 하지만 $a3$가 본래 피보나치수의 값을 가지므로 이런 방식을 택했다. $a1$, $a2$로 설정해도 결과는 같았다.
짝수를 판별해 sum에 누적하여 출력하면 정답을 얻을 수 있다.
정답:
더보기
4613732
반응형
'프로그래밍 > Baekjoon' 카테고리의 다른 글
(C언어)프로젝트 오일러(Project Euler) 6. 1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는? (0) | 2020.05.25 |
---|---|
(C언어)프로젝트 오일러(Project Euler) 5. 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수 (0) | 2020.05.25 |
(C언어)프로젝트 오일러(Project Euler) 4.세자리 수를 곱해 만들 수 있는 가장 큰 대칭수 (0) | 2020.05.25 |
(C언어)프로젝트 오일러(Project Euler) 3.가장 큰 소인수 구하기 (0) | 2020.05.25 |
project euler(프로젝트 오일러) 1. 1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하면? (0) | 2018.03.28 |