下楼梯问题
程序员文章站
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;
}
上一篇: 关键字,标识符,注释,数据类型
下一篇: myhome.sql