上台阶

描述

楼梯有n(71>n>0)阶台阶,上楼时可以一步上1阶,也可以一步上2阶,也可以一步上3阶,编程计算共有多少种不同的走法。

格式

输入格式

输入的每一行包括一组测试数据,即为台阶数n。最后一行为0,表示测试结束。

输出格式

每一行输出对应一行输入的结果,即为走法的数目。

(1)那就完全模拟(发现数据太大行不通!)

#include<stdio.h>
int time;//种数

//1 2 3
int fun(int n){
	for (int i = 1; i <= 3; i++){
		if (n - i >= 0){
			if (n - i == 0){//走完了
				n = 0;
				time++; printf("%d ", time);
				return 1;
			}
			fun(n-i);
		}
		else return 0;
	}
}

int main(){
	int n;
	do{
		scanf("%d", &n);
		if (n == 0)break;
		time = 0; 
		fun(n);
		printf("%d\n", time);
	} while (n != 0);
	return 0;
}

输入70运行居然十分钟还没结束,肯定不行了;

根据输出结果发现有规律:ans(n)=ans(n-1)+ans(n-2)+ans(n-3);其实这也是类似一种斐波那契数列(百度百科)

于是:

(2)直接数学计算(虽然我给了100级的空间,但是会发现也只能算70级,大了会溢出,更多级就考虑用数组来存一个超大数)

#include<stdio.h>
long long a[100];

long long fun(){
	a[1]= 1;
	a[2]= 2;
	a[3]= 4;
	for (int i = 4; i <= 99; i++){
		a[i] = a[i - 1] + a[i - 2] + a[i - 3];
	}
	return 0;
}

int main(){
	int n;
	fun();
	do{
		scanf("%d", &n);
		if (n == 0)break;
		printf("%lld\n", a[n]);
	} while (1);
	return 0;
}

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Super algorithm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值