Input There are multiple test cases. For each test case, there will be one line of input having two integers N (0 < N <= 10^8) and k (0 < k <= 100). Input terminates when both N and k are zero.
Output For each case, print the winner's name in a single line.
Sample Input1 1 30 3 10 2 0 0Sample Output
Jiang Tang Jiang
题目大意T和J轮流写数,T先写一个[1,k]之间的数x,然后J再写一个比x大[1,k]的数y,然后再轮到T写比y大[1,k]的数x,再轮到J....,每次写的数都比上一个人写的数大[1,k],直到某个人写的数大于等于n,这个人就输了
题目分析:这是一道巴什博弈的应用,当写到n-1时,下一个写数的人必败。如果n-1=k+1,则先手必败,由此得出如果(n-1)%(k+1)=0,则先手必败,否则先手必胜。
代码如下:
#include <iostream>
using namespace std;
int main()
{
int n,k;
while(cin>>n>>k&&n&&k)
{
if((n-1)%(k+1)==0)
cout<<"Jiang"<<endl;
else
cout<<"Tang"<<endl;
}
return 0;
}
巴士博弈参考博客:https://blog.csdn.net/ac_gibson/article/details/41624623