[1]I solved the third question of NOIP2008, Ball. It is a question of recursion. And we can regard it as a Yanghui Triangle. We need work out the middle number of the M line. The source code and the commentary will tell you how to solve it in detail.
[2]3.传球游戏
(ball.pas/c/cpp)
【问题描述】
上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。
游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。
聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里。两种传球的方法被视作不同的方法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。比如有3个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方式有1->2->3->1和1->3->2->1,共2种。
【输入】
输入文件ball.in共一行,有两个用空格隔开的整数n,m(3<=n<=30,1<=m<=30)。
【输出】
输出文件ball.out共一行,有一个整数,表示符合题意的方法数。
【输入输出样例】
ball.in ball.out
3 3 2
【限制】
40%的数据满足:3<=n<=30,1<=m<=20
100%的数据满足:3<=n<=30,1<=m<=30
[3]
type
  sz1=array[0..30,0..30]of longint;
var
  n,m,i,j:longint;
  a:sz1;//a[j,i]表示第j个人在第i次接到球的所有可能性总数。
function f1:longint;
begin
  read(n,m);
  exit(0);
end;
function f2:longint;
begin
  a[1,0]:=1;
  for i:=2 to n do
    a[i,0]:=0;
  for i:=1 to m do
    for j:=1 to n do
      if j=n
        then
          a[j,i]:=a[1,i-1]+a[n-1,i-1]//这边是当人不是开头和结尾的时候这样处理。
        else
          if j=1
            then
              a[j,i]:=a[n,i-1]+a[2,i-1]//这边是当人是1的时候。
            else
              a[j,i]:=a[j-1,i-1]+a[j+1,i-1];//这边是当人是n的时候。
  write(a[1,m]);//因为最后求的是传回到第一个人手中的可能性总数,所以是a[1,m]
  exit(0);
end;
begin
  assign(input,'ball.in');
  assign(output,'ball.out');
  reset(input);
  rewrite(output);
  f1;
  f2;
  close(input);
  close(output);
end.
[4]这题可以用滚动数组来做,但是空间要求不大,故用空间来节省时间。
[5]以n=3 m=3为例子:
首先
令a数组为0
再令a[1,0]=1 表示第一个人在第0次的时候(即未开始传球的时候)球在其手上
根据递推公式a[i,j]=a[i-1,j-1]+a[i+1,j-1](i=1 或 n 时特别处理)可以推出
第一次传球a[1,1]=0 a[2,1]=1 a[3,1]=1
第二次传球a[1,2]=2 a[2,2]=1 a[3,2]=1
第三次传球a[1,3]=2 a[2,3]=3 a[3,3]=3
在第一次传球时,只有1号旁边的两个——2号和3号能接到球,所以他们各自加1。即上面的第一次传球情况。
在第二次传球时,如果这时球在2号,则他可以传给1或3号,所以两者各自加1;如果这时球在3号,则他可以传给1或2号,所以二者各自加1,注意,是在原来基础上再加。即上面的第二次传球情况。
在第三次传球时,如果球在1号手中,他可以传给3号或者2号,两者各自加1;如果球在2号手中,他可以传给1号或者3号,两者各自加1;如果球在3号手中,他可以传给1号或者2号,两者各自加1。即上面的第三次传球情况。
到这个时候,已经到达传球次数的限制,于是我们看第一个人在三次传球后能接到球的可能性总数为2。
[6]我实在是不会用英文写解题报告,故用中文。
[7]由于很少写解题报告,所以语言不是很好。如果看不懂,或者有错误,欢迎您指出,谢谢。
20090110
2048这游戏怎么玩
12 年前
0 评论:
发表评论