内存:64  时间:1

题目描述

Gustavo knows how to count, but he is just now learning how to write numbers. He has already learned the digits 1, 2, 3, and 4. But he does not yet realize that 4 is different than 1, so he thinks that 4 is just another way to write 1.

He is having fun with a little game he created: he makes numbers with the four digits that he knows and sums their values. For example:

132 = 1 + 3 + 2 = 6

112314 = 1 + 1 + 2 + 3 + 1 + 1 = 9 (remember that Gustavo thinks that 4 = 1)

Gustavo now wants to know how many such numbers he can create whose sum is a number n. For n = 2, he can make 5 numbers: 11, 14, 41, 44, and 2. (He knows how to count up beyond five, just not how to write it.) However, he can’t figure out this sum for n greater than 2, and asks for your help.

输入

Input will consist of an arbitrary number of integers n such that 1n1, 000. You must read until you reach the end of file.

输出

For each integer read, output an single integer on a line stating how many numbers Gustavo can make such that the sum of their digits is equal to n.

样例输入

2
3

样例输出

5
13

提示

代码如下

#include<iostream>
#include <stdio.h>
using namespace std;
int number[4]={1,2,3,1},n,ans;
void dfs(int num)
{
    if(num>=n)
    {
        if(num==n)
            ++ans;
        return;
    }
    for(int i=0;i<4;++i)
    {
        dfs(num+number[i]);
    }
}
int main()
{
    while(cin>>n,!cin.eof())
    {
        ans=0;
        if(n==0) cout<<"0"<<endl;
        else
        dfs(0);
        cout<<ans<<endl;
    }
}

代码来源于互联网,仅供参考!