题意:
Nic 和 Susan 两个人玩乘法游戏,给定初始数字1和目标数字n( 1≤n<4,294,967,295 ),Nic 和 Susan轮流将初始数字乘以2~9中的一个数并将积替换初始数字,先到达不小于目标数字小的数的人获胜。
思路:
慢慢推。
如果Someone能控制x(1除外,其实1可以看成是Susan控制着,因为最开始是Nic开始乘数),那么他就能控制x*9+1 ~ x*9*2(前提是OtherOne不能控制该数)。
首先如果是1,那么是Nic赢。(特例)
如果是2~9,那么是Nic赢。
如果是10~18,那么是Susan赢。
如果是19~162,那么是Nic赢。
如果是163~324,那么是Susan赢。
依次类推。
代码:
#include <stdio.h>
int main()
{
long long n, e;
int flag;
while (~scanf("%lld", &n))
{
e = 9;
flag = 1;
while (n > e)
{
if (flag > 0) e *= 2;
else e *= 9;
flag = -flag;
}
printf("%s wins.\n", flag>0 ? "Nic" :"Susan");
}
}