c语言石头剪子布算法

c语言石头剪子布算法,第1张

用简单的c语言实现:

#include<stdio.h>

int main()

{

int num1,num2

printf("请玩家输入<1表示石头、2表示剪子、3表示布>:")

scanf("%d",&num1)

printf("请玩家输入<1表示枣此石头、2表示剪子、3表示布>:")

scanf("%d",&num2)

//枚举可能出现的各种情况

if(num1==1 &&num2==1) // 1 1

{

printf("玩家一选择石头 ,玩家二选择石头,平局\n")

}

else if(num1==1 &&num2==2) // 1 2

{

printf("玩家一选择石头 ,玩家二选择剪子,玩家一胜利\n")

}

else if(num1==1 &&num2==3) /誉岩猛/1 3

{

printf("玩家一选择石头 ,玩家二选择布,玩家二胜利\n"庆桥)

}

else if(num1==2 &&num2==1) //2 1

{

printf("玩家一选择剪子 ,玩家二选择石头,玩家二胜利\n")

}

else if(num1==2 &&num2==2) //2 2

{

printf("玩家一选择剪子 ,玩家二选择剪子,平局\n")

}

else if(num1==2 &&num2==3) //2 3

{

printf("玩家一选择剪子 ,玩家二选择布,玩家一胜利\n")

}

else if(num1==3 &&num2==1) //3 1

{

printf("玩家一选择布 ,玩家二选择石头,玩家一胜利\n")

}

else if(num1==3 &&num2==2) //3 2

{

printf("玩家一选择布 ,玩家二选择剪子,玩家二胜利\n")

}

else //3 3

{

printf("玩家一选择布 ,玩家二选择布,平局\n")

}

return 0

}

用动态规划

注意:石子合并问题和最优二叉树是不同的。

我们先考虑求最大分值。

用a数组存放原来N堆石子的初始数量,下标从0开始。

每一次合并是对现在的某两堆相邻石子的,而这相当于将初始时的的若干堆石子合并。

用b[i,j]表示将从初始的第j堆石子开始,循环芦知向后共i堆石子合并的最大分值。(第N-1堆石子后面是第0堆脊含)

假设最后一次是前k堆合并成的一堆和剩下的i-k堆石子合并成的一堆进行合并。所以总分值就是:这两堆各自合并的总得分 加上 最后一次全部合并的得分。

状态转移方程b[i,j]=max{ b[k,j]+b[i-k,(j+k) mod N] | k=1..i-1 } + a[j] +…+ a[(j+i-1) mod N]b[1,i]=0, i=0..n-1

最后,解就是陪野消b[N,0]到b[N,N-1]中的最大值。

#include<stdio.h>改慧

int main()

{

printf("0表示石头.\n") 

printf("1表示剪刀.\n") 

printf("2表示布.\n"兆悄) 

printf("请出拳.\n") 

int a,b,c 

scanf("%d%d,&a,&b")

c=a-b

switch(c)

{

case -2: printf("后手赢.\n") break

case -1: printf("先手赢.\n") break

case  族歼渣0:  printf("平手.\n")  break

case  1:

if(a==1)

printf("后手赢.\n")

else if(a==2)

printf("先手赢.\n")

break

case 2:printf("先手赢.\n") break

}

return 0

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存