C语言捡石子游戏

C语言捡石子游戏,第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)

}

#include<stdio.h>

#include<conio.h>

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

}

#include <stdio.h>

int main ()

{

int a,b,c

const double d=1.6180339887498948482045

while(scanf("%d%d",&a,&b)!=EOF){

if (a==b) {printf("1\n")continue}

if (a>b) {c=a-ba=b}

else c=b-a

if (a==(int)(c*d))

printf("0\n")

else printf("1\n")

}

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7850482.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存