题目描述
在狐狸Ciel赢得一场编程现场赛之后,她乘坐公共汽车返回她的城堡。 公共汽车的车费是220日元。 她在巴士上遇到了兔子Hanako。 因为他们在公车上感到无聊,所以她们决定玩下面这个游戏。 起初,有一堆硬币,里面包含了x枚100日元硬币和y枚10日元硬币。 他们轮流从中取硬币。 Ciel先手拿。 在每个回合里,她们每次必须从堆中拿出刚好220日元。 在轮到Ciel时,如果她有多种方式可以从中取出220日元,她会选择包含最大数量的100日元硬币的方式。 轮到Hanako时,如果有多种方式可以取出220日元,她会选择包含最多10日元硬币的方式。如果轮到了Ciel或Hanako不能从堆中拿出220日元,那么她就会失败。 请确定这场游戏的胜利者。
输入格式:
第一行包括两个用空格分隔开的整数
输出格式:
如果Ciel能赢,那就输出Ciel,否则输出Hanako
说明: 第一回合(Ciel取),她会选择2个100日元硬币和2个10日元硬币。 在第二回合(Hanako取),她会选择1个100日元硬币和12个10日元硬币。 在第三回合(Ciel取),她不能取得220日元,所以Ciel会输。
输入数据 1
2 2
Copy
输出数据 1
Ciel
Copy
输入数据 2
3 22
Copy
输出数据 2
Hanako
代码思路:
情况不多,可以枚举,一个一个判断赢得情况过于麻烦,可以从输的情况里再根据百元和十元的数量枚举其他情况
找到对应情况就退出,while循环里套分支就行。总结———————————————————————————————————————————
水题
AC代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x,y;
cin >>x>>y;
while(true)
{
if(x>=2)
{
if(y>=2)
{
x-=2;
y-=2;
}
else
{
cout <<"Hanako";
return 0;
}
}
else if(x==1)
{
if(y>=12)
{
x-=1;
y-=12;
}
else
{
cout <<"Hanako";
return 0;
}
}
else
{
if(y>=22)
{
y-=22;
}
else
{
cout <<"Hanako";
return 0;
}
}
//Hanako
if(y>=22)
{
y-=22;
}
else
{
if(y>=12 && x>=1)
{
x-=1;
y-=12;
}
else if(y>=2 && x>=2)
{
x-=2;
y-=2;
}
else
{
cout <<"Ciel";
return 0;
}
}
}
return 0;
}