Output
对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。
SampleInput
2
12
36
SampleOutput
1
3
一只蜜蜂可以往下一格走,也可以往图的右边走。
比如:
蜜蜂在1格里,它可以往2、3两格里爬。
蜜蜂在6格里,它可以往7、8两格里爬。
所以在第n格里蜜蜂可以爬到第n+1,n+2格子里。
#include
intmain(void)
{
inti,j,n;
__int64d[51]={1,1,2,};
for(i=3;i<51;i++)
d[i]=d[i-1]+d[i-2];
scanf("%d",&n);
while(n--&&scanf("%d%d",&i,&j)!
=EOF)
printf("%I64d\n",i>j?
0:
d[j-i]);
return0;
}
4.不容易系列之(3)——LELE的RPG难题
ProblemDescription
人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题:
有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.
以上就是著名的RPG难题.
如果你是Cole,我想你一定会想尽办法帮助LELE解决这个问题的;如果不是,看在众多漂亮的痛不欲生的Cole女的面子上,你也不会袖手旁观吧?
Input
输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0Output
对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。
SampleInput
1
2
SampleOutput
3
6
数组F[i]保存i个方格有多少种填涂方法。
n个方格可以由n-1个方格和n-2个方格填充得到。
比如,在一涂好的n-1个格子里最后再插入一个格子,就得到了n个格子了。
因为已经填好n-1的格子中,每两个格子的颜色都不相同。
所以只能插入一种颜色。
而n-1个格子一共有F[n-1]种填涂方法。
所以从n-1格扩充到n格共有F(n-1)种方法。
若前n-1不合法,而添加一个后变成合法,即前n-2个合法,而第n-1个与第1个相同。
这时候有两种填法。
所以
f[n]=f[n-1]+2*f[n-2];
f[1]=3;
f[2]=6;
f[3]=6
#include
#include
intmain(void)
{
inti;
__int64d[51]={0,3,6,6};
for(i=4;i<51;i++)
d[i]=d[i-1]+2*d[i-2];
while(scanf("%d",&i)!
=EOF)
printf("%I64d\n",d[i]);
return0;
}
5.骨牌铺方格
ProblemDescription
在2×n的一个长方形方格中,用一个1×2的骨牌铺满方格,输入n,输出铺放方案的总数.
例如n=3时,为2×3方格,骨牌的铺放方案有三种,如下图:
图略
Input
输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n(0Output
对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。
SampleInput
1
3
2
SampleOutput
1
3
2
从图中也可以观察出来,第N张牌的排列可以又N-1张牌的排列再在末尾加上一张竖的牌。
这样依然合法。
也可以在N-2张合法排列的牌后面加上两张横着放的牌(如果竖着放就和上面一种重复了)。
所以f(n)=f(n-1)+f(n-2)
即又是一个斐波那契数列。
#include
#include
intmain(void)
{
inti;
__int64d[51]={1,1,2,};
for(i=3;i<51;i++)
d[i]=d[i-1]+d[i-2];
while(scanf("%d",&i)!
=EOF)
printf("%I64d\n",d[i]);
return0;
}
6.折线分割平面
ProblemDescription
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。
比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
图略
Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C行数据,每行包含一个整数n(0Output
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
SampleInput
2
1
2
SampleOutput
2
7
从图中也可以观察出来,第N张牌的排列可以又N-1张牌的排列再在末尾加上一张竖的牌。
这样依然合法。
也可以在N-2张合法排列的牌后面加上两张横着放的牌(如果竖着放就和上面一种重复了)。
所以f(n)=f(n-1)+f(n-2)
#include
#include
intmain(void)
{
inti;
__int64d[51]={1,1,2,};
for(i=3;i<51;i++)
d[i]=d[i-1]+d[i-2];
while(scanf("%d",&i)!
=EOF)
printf("%I64d\n",d[i]);
return0;
}
7.悼念512汶川大地震遇难同胞——重建希望小学
ProblemDescription
下面是512汶川大地震部分受灾学校伤亡情况(惨痛!
!
)
1、四川省都江堰市聚源中学
伤亡情况:
遇难学生人数(含失踪)320
详细说明:
一栋教学楼被震垮,该楼18个班420多名学生被埋,截至目前仅有不到100名获救。
2、四川省绵阳市北川县北川中学
伤亡情况:
遇难学生人数(含失踪)1200多人
详细说明:
学校教室损毁情况严重,六至七层高的主教学楼已经垮塌得只有一人多高,其他两个教学楼和宿舍也有不同程度垮塌
3、四川省绵阳市北川县曲山小学(绵阳市示范小学)
伤亡情况:
遇难学生人数(含失踪)698人
详细说明:
学校位于北川县郊一公里处的任家坪镇,在校师生人数1003人,地震使学校一座五层教学楼的整体倒塌,只剩下了一层
4、四川省绵阳市北川县曲山幼儿园
伤亡情况:
在校师生人数500多,仅生还20余人
详细说明:
学校位于绵阳市北川县曲山镇危家巷,曲山幼儿园及学前班500多名学生被滑坡气浪推移20多米,教学大楼像竹编一样倒下,整体向外挪出五十公分仅凭肉眼根本无法作出判断这是四层楼……
5、四川省绵阳市北川县茅坝初中
伤亡情况:
在校师生人数240多,仅生还20余人
详细说明:
教室被泥石流掩埋,学校只剩一根歪歪斜斜的旗杆和一面鲜艳的五星红旗……
…..
为什么会有这么多的学校伤亡惨重?
也许有很多值得我们调查的东西。
但对于我们来说,当前最紧迫的任务是重建学校,以便让幸存的学生早日走进课堂。
这不,一所由社会各界捐款修建的希望小学马上就要竣工了!
学校教室的长度为n米,宽度为3米,现在我们有2种地砖,规格分别是1米×1米,2米×2米,如果要为该教室铺设地砖,请问有几种铺设方式呢?
Input
输入数据首先包含一个正整数C,表示包含C组测试用例,然后是C行数据,每行包含一个正整数n(1<=n<=30),表示教室的长度。
Output
对于每组测试数据,请输出铺设地砖的方案数目,每个输出占一行。
SampleInput
2
2
3
SampleOutput
3
5
#include
intmain()
{
__int64a[35],i;
a[1]=1;a[2]=3;a[3]=5;
for(i=4;i<=30;i++)
a[i]=a[i-1]+2*a[i-2];
intt;
scanf("%d",&t);
while(t--)
{
scanf("%I64d",&i);
printf("%I64d\n",a[i]);
}
return0;
}
10.统计问题
ProblemDescription
在一无限大的二维平面中,我们做如下假设:
1、每次只能移动一格;
2、不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、走过的格子立即塌陷无法再走第二次;
求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。
Input
首先给出一个正整数C,表示有C组测试数据
接下来的C行,每行包含一个整数n(n<=20),表示要走n步。
Output
请编程输出走n步的不同方案总数;
每组的输出占一行。
SampleInput
2
1
2
SampleOutput
3
7
设a[n]是向上走n步的方法数,b[n]是向左或向右走的方法数,
则a[n+1]=a[n]+b[n],b[n+1]=b[n]+2*a[n],
化简得a[n]=2*a[n-1]+a[n-2];
#include
#include
usingnamespacestd;
intmain(intargc,char*argv[])
{
inti,t,f[22];
f[1]=3;
f[2]=7;
for(i=3;i<22;i++)
f[i]=2*f[i-1]+f[i-2];
cin>>t;
while(t--)
{
cin>>i;
cout<}
return0;
}