两个人玩一个数字游戏,给定两个正整数A,B,两个人轮流从一个数中减去另外一个数的正数倍,要保证结果非负,首先得到0的人获胜。例如:30 8经过一步操作可以变为22 8 或者14 8 或者 6 8。两个人都足够聪明。
输入格式:
多组数据,每组数据占一行是两个空格分隔的正整数(在32位整书范围内)
输出格式:
每组数据一行,输出是第一个人赢,还是第二个人赢。
输入样例
3 5
4 5
输出样例:
1
2
解题思路:
对于任意给定的两个数a,b,不防假设a>b。
由两个人轮流从一个数中减去另外一个数的正数倍,要保证结果非负这句话,可以知道,当a远大于b时,我们可以选择减去b或2*b或3*b等。
那选择的依据是什么呢?
现在我用4个int数组来进行保存。a[70],b[70],c[70],d[70].
其中a[i]存储除数,b[i]存储被除数,c[i]存储a[i]/b[i]的余数,d[i]存储a[i]/b[i]的商,直到c[i]为0时结束
比如当a=8,b=5时
a b c d
8 5 3 1
5 3 2 1
3 2 1 1
2 1 0 1
通过以下两个例子来得出第一个人想要赢是如何取数的
case 1).a=10 b=3
a b c d
10 3 1 3
3 1 0 3
此时第一个人为了要保证赢,他必须用a-2*b.此后a=4,b=3,第二个人只能做a-b,使得a=3,b=1,第一个人赢。
case 2).a=8 b=5
a b c d
8 5 3 1
5 3 2 1
3 2 1 1
2 1 0 1
在这种情况下,第一个人与第二个人他们在每次取数下都只有一种选择,他们无法因为自己足够聪明而自主掌握赢的权利
通过这两种情况,也就可以得出,第一个人与第二个人轮流取数,当谁先遇到d[i] != 1时,他就可以将赢的机会一直把握在手中。
而如果d[i]始终为1,那就只能看缘分了....
以上是分析思路 ,解题可以像我用数组不较麻烦点,也可以用递归...全凭个人喜好。