알고리즘/codewars

codewars: Fibonacci, Tribonacci and friends

꾸준함. 2018. 1. 29. 21:41

문제 링크입니다: https://www.codewars.com/kata/556e0fccc392c527f20000c5/train/cpp

피보나치 수열의 원리만 안다면 쉽게 풀 수 있습니다.


/*

피보나치 수열은 F(n)=F(n-1)+F(n-2) 이런식으로 구한다.

조금 더 확장해보자.

Quadribonacci F(n)=F(n-1)+F(n-2)+F(n-3)+F(n-4)이다.

그렇다면 Xbonacci F(n)=F(n-1)+...+F(n-x)이다.

Xbonacci를 구하는 프로그램을 작성하시오

*/

#include <iostream>

#include <vector>

using namespace std;

 

std::vector<int> xbonacci(std::vector<int> signature, int n)

{

        int length = signature.size();

        if (n < length) //출력하고자 하는 길이가 배열의 크기보다 작다면

               while (signature.size() != n)

                       signature.pop_back();

        for (int i = length; i < n; i++) //i번째 index 계산

        {

               int sum = 0;

               for (int j = 1; j <= length; j++)

                       sum += signature[i-j];

               signature.push_back(sum);

        }

        return signature;

}

 

ostream &operator<<(ostream &os, std::vector<int> signature) //출력 연산자

{

        for (int i = 0; i < signature.size(); i++)

               os << signature[i] << " ";

        os << endl;

        return os;

}

 

int main(void)

{

        std::vector<int> signature = { 0, 1 };

        cout << xbonacci(signature, 10) << endl;

        signature = { 1, 1 };

        cout << xbonacci(signature, 10) << endl;

        signature = { 0, 0, 0, 0, 1 };

        cout << xbonacci(signature, 10) << endl;

        signature = { 1, 0, 0, 0, 0, 0, 1 };

        cout << xbonacci(signature, 10) << endl;

        signature = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

        cout << xbonacci(signature, 20) << endl;

        signature = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

        cout << xbonacci(signature, 9) << endl;

        signature = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

        cout << xbonacci(signature, 0) << endl;

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형