一道信息学竞赛的题,pascal语言,Happy coin

Happy Coin (coin.pas/c/cpp) coin.in/coin.out [Description] 桌子上有一排硬币,每个硬币要么正面朝上(用1表示)要么背面朝上(用0表示)。A和B两人轮流进行游戏。 游戏规则如下,A先手: 1、若桌上有大于等于两个硬币,每个人每步可任意取走相邻的两个硬币。如果两个硬币都是正面朝上或者背面朝上,则用一个背面朝上的硬币放在原处;否则用一个正面朝上的硬币放在原处。 2、若桌上只有一个硬币,若这个硬币正面朝上则A获胜,否则B获胜 若两个人都足够聪明,问谁能够获胜? [Input Format] 一行,一个字符串S,|S|<500000。 [Output Format] 一个字母,获胜者,A或B [Sample Input] 1111111 [Sample Output] A 问题: 是不是只用判断1的个数,如果是奇数就是a赢,如果是偶数就是b赢? 如果不是,请高人指点。 跪谢~

我发现的规律如下:(应该对,你再推了下) 别管怎没走都是一种结果。 正<>0 或反<>0: 奇数个 正+ 奇数个 反=正;(A赢) 偶数个 正+ 偶数个 反=反;(B赢) 奇数个 正+ 偶数个 反=反;(B赢) 偶数个 正+ 奇数个 反=反;(B赢) 正=0只有反: 结果只有得反;(B赢) 反=0只有正: 奇数个得正;(A赢) 偶数个得反;(B赢) Program HappyCoin; Const Infile = 'HappyCoin.in'; Var ch: Char; a, b: Integer; Begin Assign(Input, Infile); Reset(Input); While Not Eof Do Begin Read(ch); If ch = '1' Then Inc(a); If ch = '0' Then Inc(b); End; Close(Input); If a = 0 Then WriteLn('B'); If b = 0 Then If Odd(a) Then WriteLn('A') Else WriteLn('B'); If (a <> 0) And (b <> 0) Then Begin If Odd(a) And Odd(b) Then WriteLn('A') Else WriteLn('B'); End; End.
温馨提示:答案为网友推荐,仅供参考
相似回答