本题题号特殊,相对简单。
题目描述
在长沙城新建的环城公路上一共有 88 个公交站,分别为 A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另外一个公交站往往要换几次车,例如从公交站 A 到公交站 D,你就至少需要换 33 次车。
Tiger 的方向感极其糟糕,我们知道从公交站 A 到公交 E 只需要换 44 次车就可以到达,可是 tiger 却总共换了n 次车,注意 tiger 一旦到达公交站 E,他不会愚蠢到再去换车。现在希望你计算一下 tiger 有多少种可能的乘车方案。
输入格式
仅有一个正整数 n,表示 tiger 从公交车站 A 到公交车站 E 共换了 n 次车。
输出格式
输出一个正整数表示方案数,由于方案数很大,请输出方案数除以 10001000 后的余数。
输入样例
说明/提示
8 条路线分别是:
(A→B→C→D→C→D→E),(A→B→C→B→C→D→E),
(A→B→A→B→C→D→E),(A→H→A→B→C→D→E),
(A→H→G→F→G→F→E),(A→H→G→H→G→F→E),
(A→H→A→H→G→F→E),(A→B→A→H→G→F→E)。
数据范围
4≤n≤。
解析:简单递归,废话不多说,直接上code!
不准直接抄!!!
#include <iostream>
using namespace std;
int n,a,b;
int main(){
b=1;
cin>>n;
if(n&1) //是奇数
{
putchar(48); //输出0
return 0;
}
n>>=1; //一次走两步
for(int i=1;i<n;i++) //最后还要留两步去终点
{
a=(a<<1)+b;
b+=a;
while(a>999)
a-=1000; //取模,直接模比较慢
while(b>999)
b-=1000;
}
if((a=a<<1)>999)
a-=1000; //乘2
printf("%d",a);
//输出
return 0;
}
Ladies and gentlemen,赶紧用你发财的小手点个赞吧!