首页 > 其他分享 >洛谷刷题_P1255 数楼梯

洛谷刷题_P1255 数楼梯

时间:2022-11-18 16:34:15浏览次数:81  
标签:P1255 洛谷 数列 走法 int long 斐波 那契 刷题

题目

P1255 数楼梯

题目链接

https://www.luogu.com.cn/problem/P1255

知识点

斐波那契数列

斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……,在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

题解

这道题先算一下前几阶楼梯的走法

  • 1阶:1种走法,就是1;
  • 2阶:2种走法,分别是1 1,2;
  • 3阶:3种走法,分别是1 1 1,1 2,2 1;
  • 4阶:5种走法,分别是1 1 1 1,1 2 1,2 1 1,1 1 2,2 2;

可以发现,它就是一个斐波那契数列。

首先尝试:

#include <stdio.h>
int main ()
{
	int n;
	int a=1,b=2,c=0;
	scanf("%d",&n);
	for(int i=3;i<=n;i++)
	{
		c=a+b;
		a=b;
		b=c;
	}
	printf("%d",c);
	return 0;
}

发现只有30分,看了N的范围是1≤N≤5000。猜想可能后面的数会很大,再用long long的类型试一下。

#include <stdio.h>
int main ()
{
	int n;
	long long a=1,b=2,c=0;
	scanf("%d",&n);
	for(int i=3;i<=n;i++)
	{
		c=a+b;
		a=b;
		b=c;
	}
	printf("%lld",c);
	return 0;
}

变成40了,看样子就是数据范围的问题。long long还不够的话应该是就是要用到高精度了。

final code:

#include<stdio.h>
#include<cstring>
int a[5005],b[5005],c[5005];
int len=1,n=1;
void Fibo()
{
	a[1]=1,b[1]=2;
	for(int i=3;i<=n;i++)
	{
		for(int j=1;j<=len;j++)
		{
			c[j]=a[j]+b[j];
		}
		for(int j=1;j<=len;j++)
		{
			if(c[j]>9)
			{
				c[j+1]+=c[j]/10;
				c[j]=c[j]%10;
				if(j+1>len) len++;
			}
		}
		for(int j=1;j<=len;j++) a[j]=b[j];
		for(int j=1;j<=len;j++) b[j]=c[j];
	}	
}
int main ()
{
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	scanf("%d",&n);
	if(n<3)
	{
		printf("%d",n);
		return 0;
	}
	Fibo();
	for(int i=len;i>0;i--)
	{
		printf("%d",c[i]);
	}
	return 0;	
}

参考文章

https://blog.csdn.net/qq_41857193/article/details/79686852

标签:P1255,洛谷,数列,走法,int,long,斐波,那契,刷题
From: https://www.cnblogs.com/Jinx8823/p/16903673.html

相关文章

  • 邮递员送信(洛谷1629)
    ​​传送门​​​第一反应是Floyd,但是看看数据规模,会tle那就考虑n次单源最短路,但是即使是SPFA,也会t那肯定就另有玄机。我们每次出去送货后都要直接返回邮局,所以我们需要......
  • LeetCode刷题记录.Day18
    实现strStr28.找出字符串中第一个匹配项的下标-力扣(LeetCode)classSolution{public://構造next前綴表voidgetNext(int*next,conststring&s){......
  • LeetCode刷题(6)【栈】有效的括号(C语言)
    有效的括号20.有效的括号-力扣(LeetCode)(leetcode-cn.com)​思路:是左括号,就入栈,是右括号,就与栈顶的左括号判断是否匹配,如果匹配,继续,不匹配就终止。从第79行开始,前面都是......
  • LeetCode刷题(8)【栈&队列】用栈实现队列(C语言)
    用栈实现队列232.用栈实现队列-力扣(LeetCode)(leetcode-cn.com)类似题目——用队列实现栈​​LeetCode刷题(7)【栈&队列】用队列实现栈(C语言)_半生瓜のblog-CSDN博客​......
  • LeetCode刷题(9)【树】前序&深度&平衡(C语言)
    ​二叉树的前序遍历144.二叉树的前序遍历-力扣(LeetCode)(leetcode-cn.com)本题中,对于C++或者Java等语言,返回的是它们的数据结构库里面的数据结构,而C语言没有,这也就是如果......
  • NowCoder刷题(1)【树】二叉树的遍历(含图解)
    二叉树的遍历(IO型)二叉树遍历_牛客题霸_牛客网(nowcoder.com)题目描述如图所示的这棵树前序输出结果为A-B-D-#-#-E-#-#-C-#-#还原过程示例1示例2——前序遍历还原代码实现......
  • LeetCode刷题(1)【链表】【反转链表】(C语言)
    我的小站——半生瓜のblog(doraemon2.xyz)题目链接——206.反转链表-力扣(LeetCode)(leetcode-cn.com)反转链表思路一:反转指针。本质上就是调转指针的方向。首先我们......
  • LeetCode刷题(4)【移除元素&合并两个有序数组】(C语言)(含图解)
    移除元素典型双指针玩法。27.移除元素-力扣(LeetCode)(leetcode-cn.com)我们都会想到这样的解法:从前面依次往后推,是val就将该数据后面的元素依次覆盖上来,但是这样的时间复......
  • LeetCode刷题(5)【链表】【环形链表II】(C语言)
    环形链表I​​LeetCode刷题(3)【链表】【环形链表】&扩展_半生瓜のblog-CSDN博客​​环形链表II142.环形链表II-力扣(LeetCode)(leetcode-cn.com)这个题写起来不难,但是证......
  • LeetCode刷题(7)【栈&队列】用队列实现栈(C语言)
    用队列实现栈225.用队列实现栈-力扣(LeetCode)(leetcode-cn.com)目的:用队列实现栈,从先进先出——>先进后出,1234这四个数据依次从队列1的队尾进入,要让4先出,一个队列是无法......