Problem Description
小银今天准备去爬山,山上的台阶太难爬了,但是小银最近得到了一个新的技能,他每一次可以向上跳一个台阶,也可以两个台阶,也可以三,四,五…….n个台阶。现在已知台阶的数量为n,小银想知道他有多少种方法跳上山顶。
Input
多组输入,每组输入一个整数n(1 <= n <= 10^5)。
Output
输出跳上n个台阶总共的跳法,由于结果可能非常的大,结果对1000000007取余。(%1000000007)
Sample Input
1
2
Sample Output
1
2
#include <stdio.h>
int main()
{
int n, i, sum;
while(scanf("%d", &n) != EOF){
sum = 1;
for(i = 1; i < n; i++)
sum = (sum*2)%1000000007;
printf("%d\n", sum);
}
return 0;
}
这个题用递归做必定超时:
一下用递归做的:
#include <stdio.h>
int main()
{
int n, i, j;
int a[100004];
a[1] = 1;
for(i = 2; i <= 100000; i++){
a[i] = 1;
for(j = 1; j < i; j++)///递推公式
a[i] = (a[i] + a[j])%1000000007;
}
while(scanf("%d", &n) != EOF){
printf("%d\n", a[n]);
}
return 0;
}