BC117 小乐乐走台阶

(来自 牛客网 编程初学者入门训练)

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值