PTA第3周——7-3数楼梯

题目:

楼梯有N阶,上楼可以一步上一阶,也可以一步上两阶。那么走到第N阶楼梯共有多少种不同的走法呢?

输入格式:

一个正整数 N(1<=N<=5000),表示楼梯阶数。

输出格式:

输出一个数,表示走到第N阶楼梯有多少种走法。

注意,数据范围很大,即使是64位也可能不够存。

输入样例1:

4

输出样例1:

5

输入样例2:

400

输出样例2:

284812298108489611757988937681460995615380088782304890986477195645969271404032323901

题意分析:

解题思路:

具体算法流程:

实现细节(代码):

#include<bits/stdc++.h>
using namespace std;
int n;
int t1,t2,t;
char n1[100000];
char n2[100000];
char n3[100000];
int jiafa(char a[100000],int aa,char b[100000],int bb) {
	if(aa>=bb) t=aa;
	else t=bb;
	for(int j=1; j<=t; j++) {
		if((b[j]+a[j]+n3[j])>=10) {
			n3[j+1]=(n3[j]+a[j]+b[j])/10;
			n3[j]=(n3[j]+a[j]+b[j])%10;
		} else {
			n3[j]+=a[j]+b[j];
		}
	}
	if(n3[t+1]!=0) t++;
}
int main() {
	cin>>n;
	n1[1]=1;
	t1=1;
	n2[1]=2;
	t2=1;
	if(n>=3) {
		for(int i=1; i<=n-2; i++) {
			jiafa(n1,t1,n2,t2);
			for(int j=1; j<=t2; j++) {
				n1[j]=n2[j];
			}
			t1=t2;
			for(int j=1; j<=t; j++) {
				n2[j]=n3[j];
			}
			t2=t;
			memset(n3,0,sizeof(n3));
		}
		for(int i=t2; i>=1; i--) {
			printf("%d",n2[i]);
		}
	} else {
		if(n==1) {
			printf("1");
		}
		if(n==2) {
			printf("2");
		}
	}
	return 0;
}

总结:

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇