方取,所以最后一根必己取。败。同理, T0态必胜#
[定理6]:S1态,只要方法正确,必胜。
证明:
若此时孤单堆堆数为奇数,把充裕堆取完;否则,取成一根。这样,就变成奇数个孤单堆,由对方取。由定理5,对方必输。己必胜。 #
[定理7]:S2态不可转一次变为T0态。
证明:
充裕堆数不可能一次由2变为0。得证。 #
[定理8]:S2态可一次转变为T2态。
证明:
由定理1,S态可转变为T态,态可一次转变为T态,又由定理6,S2态不可转一次变为T0态,所以转变的T态为T2态。 #
[定理9]:T2态,只能转变为S2态或S1态。
证明:
由定理2,T态必然变为S态。由于充裕堆数不可能一次由2变为0,所以此时的S态不可能为S0态。命题得证。
[定理10]:S2态,只要方法正确,必胜.
证明:
方法如下:
1) S2态,就把它变为T2态。(由定理8)
2) 对方只能T2转变成S2态或S1态(定理9)
若转变为S2, 转向1)
若转变为S1, 这己必胜。(定理5)
[定理11]:T2态必输。
证明:同10。
综上所述,必输态有: T2,S0
必胜态: S2,S1,T0.
两题比较:
第一题的全过程其实如下:
S2->T2->S2->T2-> …… ->T2->S1->T0->S0->T0->……->S0->T0(全0)
第二题的全过程其实如下:
S2->T2->S2->T2-> …… ->T2->S1->S0->T0->S0->……->S0->T0(全0)
下划线表示胜利一方的取法。 是否发现了他们的惊人相似之处。
我们不难发现(见加黑部分),S1态可以转变为S0态(第二题做法),也可以转变为
T0(第一题做法)。哪一方控制了S1态,他即可以有办法使自己得到最后一根(转变为
T0),也可以使对方得到最后一根(转变为S0)。
所以,抢夺S1是制胜的关键!
为此,始终把T2态让给对方,将使对方处于被动状态,他早晚将把状态变为S1。
.1.2 相关资料
算术运算符
二元算术运算符包括:+、-、*、八% (取模运算符)。整数除法会截断结果中的小数部 分。表达式
的结果是x除以y的余数,当x能被y整除时,其值为0。例如,如果某一年的年份能被4 整除但不能被100整除,那么这一年就是闰年,此外,能被400整除的年份也是闰年。因此, 可以用下列语句判断闰年:
if ((year % 4 == 0 && year % 10 0 != 0) || year % 40 0 == 0) printf("%d is a leap year\n", year); else
printf("%d is not a leap year\n", year);
取模运算符%不能应用于float或double类型。在有负操作数的情况下,整数除法截 取的方向以及取模运算结果的符号取决于具体机器的实现,这和处理上溢或下溢的情况是一 样的。
二元运算符+和-具有相同的优先级,它们的优先级比运算符*、/和%的优先级低,而运 算符*、/和%的优先级又比一元运算符+和-的优先级低。算术运算符采用从左到右的结合规 则。
本章末尾的表2-1完整总结了所有运算符的优先级和结合律。 关系运算符与逻辑运算符
关系运算符包括下列几个运算符:> >=< <=
它们具有相同的优先级。优先级仅次于它们的是相等性运算符: 计算机游戏两个火柴堆的程序设计(4):http://www.youerw.com/jisuanji/lunwen_6693.html