언타이틀/코드리뷰

수 이어가기 @GODSOL

U_유지연 2016. 6. 1. 18:26



풀이방법


입력받은 숫자 num에서 가장 많은 수열을 이룰 수 있는 두번째 숫자 temp를 찾는다.

temp가 될 수 있는 최소의 숫자는 num*0.618...이므로, 검사 횟수를 줄이기 위해 num*0.6을 최소한의 범위로 지정한다.

수열의 개수를 세는 방법은 재귀로 구현한다.



#include < iostream > 
using namespace std; 

int check(int n, int t, int cnt) 
{
    if (n < 0) return cnt; 
    cnt++; 
    check(t, n - t, cnt); 
} 

int main() 
{ 
    int num, max = 0, temp = 0; 
    cin >> num; 

    for (int i = num * 0.6; i < num; i++) 
    { 
        int cnt = 0, ck; 
        if ((ck = check(num, i, cnt)) > max) { temp = i; max = ck; } 
    } 
    cout << max << endl; 
    for (int i = num; i >= 0;) 
    { 
        cout << i << " "; 
        temp = i - temp; 
        i = i - temp; 
    } 
}