CCF 100002. 取数游戏
来源:互联网 发布:天津网络微信投票公司 编辑:程序博客网 时间:2024/06/06 17:33
取数游戏
题目描述
我们来玩一个游戏:自然数1到N,按顺序列成一排,你可以从中取走任意个数,但是相邻的两个不可以同时被取走。如果你能算出一共有多少种取法,那么你会被天神Lijiganjun奖励。
输入
仅包含一个数n(1< n < 50)。
输出
仅包含一个数———你的答案。
样例输入
5
样例输出
13
问题分析:
- 这道题的核心思想是斐波那契数列。 先考虑 f[i] 与 f[i-1] 的关系,相当于在 i-1 的序列里最后增加了一个 i ,那么就有以下两种情况,一种是先拿 i , 所以 i - 1 就不能一起拿了,因为相邻的不能一起拿,也就是说这种情况相当于前 i - 2 项跟 i 一起拿,也就是 f[i-2] ;第二种情况是留着 i 最后再拿,也就成了先只拿前 i - 1项 ,即 f[i-1] , f[i] 为两种情况之和,也就是 f[i] = f[i-1] + f[i-2]。以上是思路,下面是我看不懂的地方,首先我们假设n为2时,那输出结果不应该为2吗?也就是说是(1,2)和(2,1)这种情况,但是我看了其他人的博客都是n = 2时结果为3,这个就让我很懵了,这样我的结果跟别人的总是错了一位,也就是说他们算的n = 5的结果跟我算的n = 6的结果一样,哪位大佬能给我解释一下?
以下是AC代码(注意是AC代码,不是我的代码):
#include <iostream>using namespace std;typedef unsigned long long ULL; ULL str[100];ULL fib() //该函数用来打表{ str[1] = 2; str[2] = 3; for(int i=3; i<=70; i++){ str[i] = str[i-1] + str[i-2]; //斐波那契数列打表公式 } } int main() { fib(); //调用fib()函数 int n; while(cin>>n) { cout<<str[n]<<endl;} return 0; }
阅读全文
1 0
- CCF 100002. 取数游戏
- CCF NOI100002 取数游戏
- CCF NOI1003 猜数游戏
- 取数游戏
- 矩阵取数游戏
- 取数游戏
- 取数游戏
- 矩阵取数游戏
- 蓝桥杯-取数游戏
- 取数游戏 贪心
- 取数游戏
- 1308 取数游戏
- 取数游戏:
- 矩阵取数游戏
- 取数游戏
- 矩阵取数游戏
- 取数游戏
- 【u108】取数游戏
- dp和px之间的转换
- css3立方体的制作
- Python网页自动截图
- 这么长的存储区过程让我改,我都不知道每个表对应是干啥的,字段也没有说明。真的要崩溃了。。。
- 在linux上面安装python3
- CCF 100002. 取数游戏
- avocado接口调用
- 人生感悟
- POJ 3669 Meteor Shower 普通BFS
- 直接修改别人jar包里面的class文件 工具:jclasslib
- c语言位运算
- Javascript数据类型与基本运算
- spring boot 教程(三)配置详解
- java8 ArrayList源码阅读