您的位置:首页 > 其它

MOOC清华《程序设计基础》第6章第1题:n级台阶问题(递推法)

2017-07-23 18:47 417 查看
题目描述

下n级台阶,每步可下1级或2级台阶。那么从n级台阶下到地面,共有多少种不同的下台阶方案?

输入:n

输出:方案数

输入格式

多行输入,每一行输入一个正整数n,表示n级台阶
输出格式

每一行输出n级台阶的方案数
样例输入

1
2

样例输出

1
2


DevCpp可以编译通过,而学堂在线OJ系统不通过的代码:

#include <iostream>
using namespace std;

int N = 10;  //台阶数,方便可调

int main()
{
int n
= {0};
int i = 0;
while(cin>>n[i])  //输入台阶数
i++;
int scheme_1 = 1, scheme_2 = 2;  //给最简单的两种方案赋初值
int scheme
= {0};
int ben_xiang = 0, shang_xiang = 0, qian_xiang = 0;  //不用数组递推,节约内存空间
for(int j = 0; j < i; j++)
{
qian_xiang = scheme_1;
shang_xiang = scheme_2;
if(n[j] >= 3)
{
for(int k = 3; k <= n[j]; k++)
{
ben_xiang = shang_xiang + qian_xiang;
qian_xiang = shang_xiang;
shang_xiang = ben_xiang;   //递推公式,这个规律在草稿纸上推得
}
scheme[j] = ben_xiang;
}
if(n[j] == 1) scheme[j] = scheme_1;
if(n[j] == 2) scheme[j] = scheme_2;   //尤其要注意循环变量和数组下标
}
for(int j = 0; j < i; j++)
cout << scheme[j] << endl;
return 0;
}


错误提示如下:

Main.cpp: In function 'int main()':
Main.cpp:9:15: error: variable-sized object 'n' may not be initialized
int n
= {0};
^
Main.cpp:14:20: error: variable-sized object 'scheme' may not be initialized
int scheme
= {0};
^


经查,这是因为OJ编译器版本比较老旧造成的,定义数组大小时必须使用常量,不能用变量。

测试结果:



令我惊奇地发现:这个问题背后的数学规律,居然也是斐波那契数列!要是把题目改成或一次走1级、或一次走2级、或一次走3级,那就不能用斐波那契数列来递推了。

把定义数组长度时的变量N改为常量20以后,代码就能顺利通过OJ测试了!代码如下:

#include <iostream>
using namespace std;

int main()
{
int n[20] = {0};
int i = 0;
while(cin>>n[i]) //输入台阶数
i++;
int scheme_1 = 1, scheme_2 = 2; //给最简单的两种方案赋初值
int scheme[20] = {0};
int ben_xiang = 0, shang_xiang = 0, qian_xiang = 0; //不用数组递推,节约内存空间
for(int j = 0; j < i; j++)
{
qian_xiang = scheme_1;
shang_xiang = scheme_2;
if(n[j] >= 3)
{
for(int k = 3; k <= n[j]; k++)
{
ben_xiang = shang_xiang + qian_xiang;
qian_xiang = shang_xiang;
shang_xiang = ben_xiang; //递推公式,这个规律在草稿纸上推得
}
scheme[j] = ben_xiang;
}
if(n[j] == 1) scheme[j] = scheme_1;
if(n[j] == 2) scheme[j] = scheme_2; //尤其要注意循环变量和数组下标
}
for(int j = 0; j < i; j++)
cout << scheme[j] << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐