伊甸园日历游戏_轮流取数问题的输赢策略

伊甸园日历游戏_轮流取数问题的输赢策略

ID:11251524

大小:38.50 KB

页数:3页

时间:2018-07-11

伊甸园日历游戏_轮流取数问题的输赢策略_第1页
伊甸园日历游戏_轮流取数问题的输赢策略_第2页
伊甸园日历游戏_轮流取数问题的输赢策略_第3页
资源描述:

《伊甸园日历游戏_轮流取数问题的输赢策略》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、伊甸园日历游戏——轮流取数问题的输赢策略轮流取数问题的输赢策略一个小学的问题。如题:可以从1,2,3中取数,两人轮流取数,取的数会累加起来,从0开始,谁先到24谁赢得比赛。可以倒退。(表示某人拿到这个数的时候的输赢)假设对方也是高手,那么只有必输和必赢两种状态。24-23必赢(+1)22必赢(+2)21必赢(+3)20必输,无论取123,都让对手进入必赢的状态19必赢,取到20,则对手进入必输状态18必赢,取到2017必赢,取到2016必输。。。(以此类推)扩展到更多,可以得到结论。S表示可以取的数的集合,如上面的1,2,3T表示可以取到的数的集合,如上题的[0,24]中的整数当计算T[i]

2、的输赢的时候,只要T[i+s[j]]中有一个是必输的,那么取到这个数,则可以必赢;若全都是必赢的,那么取到这个数就是必输的.则倒推可以得到所有的解。下面是一个更加推广的题。例题:伊甸园日历游戏描述DescriptionAdam和Eve玩一个游戏,他们先从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来。然后他们轮流对这个日期进行操作:  1:把日期的天数加1,例如1900.1.1变到1900.1.2  2:把月份加1,例如:1900.1.1变到1900.2.1  其中如果天数超过应有天数则日期变更到下个月的第1天。月份超过12则变到下一年的1月。而且进行操作二的时候,如果

3、有这样的日期:1900.1.31,则变成了1900.2.31,这样的操作是非法的,我们不允许这样做。而且所有的操作均要考虑历法和闰年的规定。  谁先将日期变到2001.11.4谁就赢了。  每次游戏都是Adam先操作,问他有没有必胜策略?输入格式InputFormat一个测试点。多组数据。  第一行为数据组数。  接下来一行XYZ表示X年Y月Z日 输出格式OutputFormat输出“YES”or“NO”表示亚当是否有必胜策略。 样例输入SampleInput3200111320011122001103样例输出SampleOutputYESNONO分析就如上面的推论一样,从2001.11.4

4、从上往下一直推到1900.1.1,具体要写对日期加减的函数.1.const  2.yt=1900;  3.r:array[0..1,1..12] of longint=((31,28,31,30,31,30,31,31,30,31,30,31),(31,29,31,30,31,30,31,31,30,31,30,31));  4.var  5.f:array[0..150,1..12,1..31] of boolean;  6.y,m,d,n,i:longint;  7.procedure mk;  8.var ry:longint;  9.begin  10.if (((y+yt) mod

5、 100=0) and ((y+yt) mod 400=0)) or  11.(((y+yt) mod 100<>0) and ((y+yt) mod 4=0)) then ry:=1 else ry:=0;  12.if (m=1) and (d=0) then begin  13.y:=y-1;m:=12;d:=31;  14.end;  15.if d>r[ry][m] then begin d:=d-r[ry][m];m:=m+1; end;  16.if d<=0 then begin d:=d+r[ry][m-1];m:=m-1; end;  17.if m>12 then be

6、gin m:=m-12;y:=y+1; end;  18.if m<=0 then begin m:=m+12;y:=y-1; end;  19.end;  20.function yz(y,m,d:longint):boolean;  21.var ry:longint;  22.begin  23.if (((y+yt) mod 100=0) and ((y+yt) mod 400=0)) or  24.(((y+yt) mod 100<>0) and ((y+yt) mod 4=0)) then ry:=1 else ry:=0;  25.if (m>12) or (m<1) or (

7、d>r[ry,m]) or (d<1) then exit(false);  1.if ((y>1900-yt)and(y<2001-yt))or((y=1900-yt)and((m>1)or((m=1)and(d>=1))))or((y=2001-yt)and((m<11)or((m=11)and(d<=4)))) then exit(true);  2.exit(false);  3.end;  4.pr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。