C语言捡石子游戏

2024-11-28 19:33:00
推荐回答(3个)
回答1:

可以用递归来做,

假设 有A,B两堆石子。 A的数量是x,B的是y

递归的出口是3个状态。

1:其一等于1,另一个等于2   (输)

2:其一等于1,另一个>2      (赢) 

3:其一等于2,另一个>1      (赢)

另外,只需要定义操作了, 操作只能是两者之一。 其一:(de_both)两堆都减去同一数字的石子。另外一个(de_one)就是人选一堆,拿掉任意个数的石子。

递归过程如下;

void  simulate(int a,int b)

{

    switch(state)

    {

        case 1:

               you lose;

        case 2:

               break;

        case 3:

               you win;

     }

     if(abs(a,b)=1)  /*这时候一定能赢*/

     {

         de_both(min(a,b)-1); /*两边都取走两者中最小数-1个石子,形成状态1的形式*/

     }

     else

     {

         de_one(random);  /*这里的random只需要不使两者之差=1即可*/

     }

     simulate(a,b);

}

回答2:

#include
#include
int main(void)//也就是a或者b有一项为2或者1时,有必胜方法.
{
int i, t, a[50] = { 0 }, b[50] = { 0 }, c[50] = { 0 };
scanf("%d", &t);
for (i = 0; i < t; ++i)
{
scanf("%d", &a[i]);
scanf("%d", &b[i]);
if (a[i] == 1 || a[i] == 2 || b[i] == 1 || b[i] == 2)
c[i] = 1;
}
for (i = 0; i < t; ++i)
{
if (c[i] == 1)
printf("yes\n");
else
printf("no\n");
}
getch();
return 0;
}

回答3:

要代码??