欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

下楼梯问题

程序员文章站 2022-07-14 11:10:09
...

描述
zst最近迷上了一款小游戏:一共 N阶楼梯,从第1阶开始向下爬,每次可以选择下1阶,2阶或者3阶,请你帮助zst计算出到达第N阶台阶的方法数
输入
一个正整数N(1≤N≤50),代表楼梯阶数。
输出
一个正整数代表到达N阶台阶的方法数。

#include <bits/stdc++.h>
#define N 110
using namespace std;
int main()
{
	int n;
	long long a[N];
	memset(a,0,sizeof(a));    //数组元素清零
	cin>>n;
	a[1]=1;       
	a[2]=2;
	a[3]=4;
	 /*上n阶台阶可以是先上n-1阶再上1阶,或者先上n-2阶再上2阶,
	或者先上n-3再上3阶,由此可以得到递推关系,用数组记录结果*/
	for(int i=4;i<=n;++i)
		a[i]=a[i-1]+a[i-2]+a[i-3];
	cout<<a[n]<<endl;
    return 0;
}

描述
trader(商品交易者)手中有M件商品,每次他可以出售1件或者3件商品,请问,若 trader 想要出售完所有商品,可能有多少种方法 例如M为4 ,trader 可以选择先出售3件商品,再出售1件商品;也可以选择先出售1件商品,再出售3件商品;还可以选择分4次,每次出售1件商品。 所以总共3种方法。
输入
输入为一个整数M(1≤M≤50)。
输出
输出为一个整数s即可能的方法数。

#include<bits/stdc++.h>
#define n 55
using namespace std;
int main()
{
	long long m,a[n];
	memset(a,0,sizeof(a));
	cin>>m;
	a[1]=1;   //虽然本题不能一次卖两件产品,但是递推到2的时候必须要有结果
	a[2]=1;   //例如当n=5时,方法数有卖4(5-1)种的方法数和卖2(5-3)种的
	a[3]=2;   //方法数。
	for(int i=4;i<=m;++i)
	{
		a[i]=a[i-1]+a[i-3];
	}
	cout<<a[m];
	return 0;
} 
相关标签: 常用