挑战高楼(斐波那契非递归实现)
2015-12-09 15:09
260 查看
Description:
Jeremy想要参加广州塔的垂直马拉松活动,然而Jeremy发现在爬楼梯的过程中有不同的方式:他可以一次走1级台阶,也可以一次走2级台阶。
现在Jeremy准备在学校的楼梯进行练习准备,请问你可以算出他在m次爬n级台阶的时候,有多少种不同的方式吗?(利用函数进行计算,例如第n层的结果取决于第n-1和n-2层的结果)
输入输出格式如下:
input:
m
n1
n2
n3
…
nm (一共m个n值)
( 0< m < 20, 0 < n < 44)
output:
result1
result2
result3
…
resultm
(一共m个result,结尾有换行)
例如:
intput:
3
3
10
30
output:
3
89
1346269
Hint:
由于数据范围比较大,建议设置变量类型的时候用long
有任何问题请及时联系TA,由于题目放出来之后无法立即改动,所以请同学们发现有任何坑爹的地方请在评论区相互提醒,谢谢。
Jeremy想要参加广州塔的垂直马拉松活动,然而Jeremy发现在爬楼梯的过程中有不同的方式:他可以一次走1级台阶,也可以一次走2级台阶。
现在Jeremy准备在学校的楼梯进行练习准备,请问你可以算出他在m次爬n级台阶的时候,有多少种不同的方式吗?(利用函数进行计算,例如第n层的结果取决于第n-1和n-2层的结果)
输入输出格式如下:
input:
m
n1
n2
n3
…
nm (一共m个n值)
( 0< m < 20, 0 < n < 44)
output:
result1
result2
result3
…
resultm
(一共m个result,结尾有换行)
例如:
intput:
3
3
10
30
output:
3
89
1346269
Hint:
由于数据范围比较大,建议设置变量类型的时候用long
有任何问题请及时联系TA,由于题目放出来之后无法立即改动,所以请同学们发现有任何坑爹的地方请在评论区相互提醒,谢谢。
#include<stdio.h> long fib(int n) { if (n == 1) return 1; if (n == 2) { return 2; } else { long a = 1; long b = 2; for (int i = 2 ; i < n-1 ; i++) { b = a + b; a = b - a; } return a + b; } } int main() { int i, m, a[20], b, c[20], j = 0, k; scanf("%d", &m); for (i = 0; i < m; i++) { scanf("%d", &a[i]); b = a[i]; c[j] = fib(b); j++; } for (k = 0; k < j; k++) printf("%d\n", c[k]); return 0; }
相关文章推荐
- poj 2804 字典 (特里 要么 快排+二分法)
- R语言 RStudio快捷键总结
- Chrome开发者工具不完全指南(一、基础功能篇)
- 12.9评论5位同学试验三
- HibernateTemplate 源码
- RxJava学习资源
- 动态加载系列文章
- 回溯法解01背包问题(C语言版)
- 项目安装总结
- ios基本框架
- View的绘制流程入门.对郭霖大大文章知识小补充
- 【OpenCV入门指南】第二篇 缩放图像
- maven引入多个spring jar包中存在同名文件的问题
- 小白学算法2.8——计数排序
- Android 的设置项 I-Create Settings
- String与StringBuffer、StringBuilder的区别
- 简单算法—字符串处理
- 【百度地图JavaScript API】手机端浏览器定位的实现
- 程序员未来发展三大方向
- poj3258