Ramesh和Suresh在每个彩票上都有一个装满五颗星的盒子。以来 两盒都不需要相同数量的巧克力 决定玩游戏。获胜者将拥有两个方框 巧克力。他们交替出场,Suresh开始比赛。特定 两个盒子里的巧克力数量,让它们分别为c1和c2 玩家可以获得c1或c2个巧克力并分割 剩下一盒巧克力到两个盒子里(这两个盒子不需要 拥有相同数量的巧克力)。谁不能做这样的球员 移动输了。输入
第一行输入包含数字T(1 <= T <= 1000),数量为 测试用例。然后跟随T行,每行包含两个空格分隔 整数c1和c2
(1 << = C1&LT; = C2&LT; = 10000)。
输出对于每个测试用例打印“Ramesh”或“Suresh”取决于谁 是赢家。
输入:2 3 1 4 5
输出:Ramesh Suresh
这是我的尝试,这给了我错误的答案。再给我一些测试用例。
#include<stdio.h>
int main()
{
int t,c1,c2,max,count,min;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&c1,&c2);
min=c1<c2?c1:c2;
max=c1>c2?c1:c2;
if(max%2!=0 && min%2!=0)
printf("Ramesh\n");
else if(min%2==0 && max%2!=0)
printf("Suresh\n");
else if(max%2==0 && min%2!=0)
printf("Ramesh\n");
else printf("Suresh\n");
}
return 0;
}
答案 0 :(得分:3)
代码比这简单得多。首先,让我解释一下算法。
让W
成为数组,
W[i] = 1 if the user wins by choosing to split the box of i chocolates and 0 if he looses.
让我们构造这个数组,我们将得到一个模式。
W[1] = 0, since one can't split the box of one chocolate.
对于所有i>1
,我们有:
W[i]
= 1如果存在整数a
和b
,则a+b=i
和W[a]=W[b]=0
,0
。
上述声明暗示,为了让用户通过选择i
巧克力盒赢得胜利,他需要确保,无论他选择何种方框,他的对手都会失败。他的对手失败意味着W[a]=W[b]=0
和a+b=i
。
如果我们尝试填充这个数组,我们就会得到,
W:1 2 3 4 5 6 7 ...
val:0 1 0 1 0 1 0 ...
这意味着如果给定的整数是even
,那么suresh将获胜。如果它们都是odd
,则意味着ramesh会赢。
答案 1 :(得分:0)
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b;
scanf("%d%d",&a,&b);
if(a%2==1 && b%2==1)
printf("Ramesh\n");
else
printf("Suresh\n");
}
return 0;
}