minseo-jung / study-c

0 stars 0 forks source link

피보나치 수열 알려주는 함수 만들기 #11

Closed minseo-jung closed 5 years ago

minseo-jung commented 5 years ago
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void Fibonacci_Sequence(int a);
void p9_1_3()
{
    int a;
    printf("몇번째 수열까지 구할까요?");
    scanf("%d", &a);
    Fibonacci_Sequence(a);
    return 0;
}
void Fibonacci_Sequence(int a)
{
    int b=0;
    int c = 1;
    int d = 1;
    int e = a / 3;
    if (a % 3 == 0)
    {
        for (; e > 0; e--)
        {
            printf("%d\t%d\t%d\t", b,c,d);

            b = c + d;
            c = d + b;
            d = b + c;

        }

    }
    else if (a % 3 == 1)
    {
        for (; e > 0; e--)
        {
            printf("%d\t%d\t%d\t", b, c, d);

            b = c + d;
            c = d + b;
            d = b + c;

        }
        printf("%d\t", b);

    }
    else if (a % 3 == 2)
    {
        for (; e > 0; e--)
        {
            printf("%d\t%d\t%d\t", b, c, d);

            b = c + d;
            c = d + b;
            d = b + c;

        }
        printf("%d\t%d\t", b,c);
    }

}

//장장 한 시간이 넘게 걸린 문제... 처음에 c+d=b ,d+b=c, b+c=d로 하고 이거 왜 인식을 못하니 하면서 나름 엄청나게 많은 방법을 생각해보았지만 다 안되서 절망하던중 다시 해본 결과 저렇게 해야 되서 안타까우면서도 씁쓸한... 더 좋은 방법이 있다면 듣고 싶네요 ㅠㅠ 물론 답지가 저보다 짧은 코드를 보여주긴 했지만 그 코드는 처음에 생기는 0 1 1 반복을 예외로 두고 그 이상부터 실행 가능하게 짠거라 진성 이과인 저로서는 맘에 들지 않는군요...

wonny25 commented 5 years ago
#include <stdio.h>

void fibonacci_sequence(int num)
{
    int prev_t = 0, t = 0;
    int temp = 0;
    int i;

    for(i = 1; i <= num; i++) {
        if (i == 2) t = 1;
        printf("%d ", t);
        temp = t;
        t = prev_t + t;
        prev_t = temp;
    }

    printf("\n");
}

int main()
{
    int num = 0;

    printf("몇번째 수열까지 구할까요?\n");
    scanf("%d", &num);

    fibonacci_sequence(num);

    return 0;
}