递推

来源:互联网 发布:淘宝美工需要什么软件 编辑:程序博客网 时间:2024/04/29 07:12
1.有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?

a[1]=1;a[2]=1;
 for(i=3;i<=40;i++)    {         a[i]=a[i-1]+a[i-2];    }
scanf("%d",&m);        printf("%d\n",a[m]);

2.
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。

a[1]=1;a[2]=2;    for(i=3;i<=48;i++)        a[i]=a[i-1]+a[i-2];
scanf("%d%d",&x,&y);        printf("%I64d\n",a[y-x]);

3. 有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.

 __int64 a[55]={0,3,6,6};    for(i=4;i<=50;i++)    {        a[i]=2*a[i-2]+a[i-1];    }
while(scanf("%d",&n)!=EOF)    {        printf("%I64d\n",a[n]);    }


4. 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
__int64 a[55]={0,1,2};    for(i=3;i<=50;i++)    {        a[i]=a[i-1]+a[i-2];    }    while(scanf("%d",&n)!=EOF)    {        printf("%I64d\n",a[n]);    }
5. 今年的ACM暑期集训队一共有18人,分为6支队伍。其中有一个叫做EOF的队伍,由04级的阿牛、XC以及05级的COY组成。在共同的集训生活中,大家建立了深厚的友谊,阿牛准备做点什么来纪念这段激情燃烧的岁月,想了一想,阿牛从家里拿来了一块上等的牛肉干,准备在上面刻下一个长度为n的只由"E" "O" "F"三种字符组成的字符串(可以只有其中一种或两种字符,但绝对不能有其他字符),阿牛同时禁止在串中出现O相邻的情况,他认为,"OO"看起来就像发怒的眼睛,效果不好。

你,NEW ACMer,EOF的崇拜者,能帮阿牛算一下一共有多少种满足要求的不同的字符串吗?
 __int64 a[45];        int n;a[1]=3;a[2]=8;    for(int i=3;i<40;i++)        a[i]=2*(a[i-1]+a[i-2]);    while(scanf("%d",&n)!=EOF)    printf("%I64d\n",a[n]);

6. HDU 2006'10 ACM contest的颁奖晚会隆重开始了!
为了活跃气氛,组织者举行了一个别开生面、奖品丰厚的抽奖活动,这个活动的具体要求是这样的:

首先,所有参加晚会的人员都将一张写有自己名字的字条放入抽奖箱中;
然后,待所有字条加入完毕,每人从箱中取一个字条;
最后,如果取得的字条上写的就是自己的名字,那么“恭喜你,中奖了!”

大家可以想象一下当时的气氛之热烈,毕竟中奖者的奖品是大家梦寐以求的Twins签名照呀!不过,正如所有试图设计的喜剧往往以悲剧结尾,这次抽奖活动最后竟然没有一个人中奖!

我的神、上帝以及老天爷呀,怎么会这样呢?

不过,先不要激动,现在问题来了,你能计算一下发生这种情况的概率吗?

f[1]=0;f[2]=1;
 for(i=3;i<21;i++)//错排!
  f[i]=(i-1)*(f[i-1]+f[i-2]);
 scanf("%d",&t);
 while(t--)
 {
  scanf("%d",&n);
  sum=1;
  for(i=1;i<=n;i++)
   sum*=i;
  printf("%.2lf%%\n",f[n]*100.0/sum);

 }


0 0
原创粉丝点击