Integer 4 can be expressed as a sum of 1s, 2s, and 3s in seven different ways as follows:
1 + 1 + 1 + 1; (1)
1 + 1 + 2; (2)
1 + 2 + 1; (3)
2 + 1 + 1; (4)
2 + 2; (5)
1 + 3; (6)
3 + 1: (7)
Write a program that determines the number of ways in which a given integer can be expressed as a sum of 1s, 2s, and 3s. You may assume that the integer is positive and less than 20.
Input
The input consists of T test cases. The number of test cases (T ) is given in the first line of the input. Each test case consists of an integer written in a single line.Output
Print exactly one line for each test case. The line should contain an integer representing the number of ways.Sample Input
3 4 7 10
Sample Output
7 44 274
Problem Source: SJTU Programming Contest 2004
#include <stdio.h>
int sum;
void f(int n)
{
if(n>=3)
f(n-3);
if(n>=2)
f(n-2);
if(n>=1)
f(n-1);
if(n == 0)
sum++;
}
int main()
{
int n,num;
scanf("%d",&n);
while(n>0)
{
sum = 0;
scanf("%d",&num);
f(num);
printf("%d/n",sum);
n--;
}
return 0;
}
本文介绍了一个简单的递归算法,该算法用于计算一个指定正整数可以如何被拆分为1、2和3的和的不同方式的数量。通过示例输入输出展示了算法的实际运行效果。
585

被折叠的 条评论
为什么被折叠?



