(来自 牛客网 编程初学者入门训练)
1.问题:
(链接呈上:走台阶)
描述
小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?
输入描述:
输入包含一个整数n (1 ≤ n ≤ 30)
输出描述:
输出一个整数,即小乐乐可以走的方法数。
示例1
输入:
10输出:
89
2.思路:
首先根据输入描述输入台阶数n ; 然后自己在草稿纸上进行规律寻找,发现:从第三个台阶开始,后面的台阶方法数=前面两个台阶方法数之和 ; 因为要记录台阶数n以及前(n-1)阶的台阶方法数,所以选择使用 数组 进行存储 ; 而数组的选择要注意[]内数字一定要大于30,因为数组下标从0开始,而本题台阶数从下标1开始记录,所以应该有1-30个数+0对应的数,故一定要大于30 ; 然后输出时同样要注意,详见代码。
3.代码:
//规律:由写出几个数知道 从第三个台阶开始,后一个数=前两个数之和!!!
//此时需要记录的不仅是第几个台阶 还有前(n-1)个台阶对应的方法数! 故用数组记录!
#include<stdio.h>
void Way(int n)
{
int count = 0;
int sum[31] = { 0 ,1 , 2 };
//此处必须是31 因为包含了0 台阶数若想到达30 则数组包含32个数
if (1 == n)
{
printf("1\n");
}
else if (2 == n)
{
printf("2\n");
}
else //n>=3
{
int i = 0;
for (i = 3; i <= n; i++)
{
sum[i] = sum[i - 2] + sum[i - 1];
}
printf("%d\n", sum[n]);//此时如果用 sum[i] i=0 所以会一直输出0!
}
}
int main()
{
int n = 0;
//printf("请输入台阶数:");
scanf("%d", &n);
if ((n >= 1) && (n <= 30))
{
//printf("可以走的方法数:");
Way(n);
}
return 0;
}