24点游戏C语言编程。要求 游戏给出4个1-13的整数 用户输入一个含这4个整数的四则运算表达式 10

24点游戏C语言编程。要求游戏给出4个1-13的整数用户输入一个含这4个整数的四则运算表达式(可以有括号)游戏判断用户的表达式是否得到24游戏给出的数必须保证有解... 24点游戏C语言编程。要求 游戏给出4个1-13的整数 用户输入一个含这4个整数的四则运算表达式(可以有括号) 游戏判断用户的表达式是否得到24 游戏给出的数必须保证有解 展开
 我来答
汤文惠5k
2016-04-19
知道答主
回答量:13
采纳率:0%
帮助的人:11.6万
展开全部
输入:A 2 3 4 5 6 7 8 9 10 J Q K
输出:Yes/No
#include <stdio.h>
#include <string.h>

char t[10][10];
int b[5][1000],bx[3][200],by[3][200],g[5],p[5];
int i,j,k;
bool f;

int main()
{
while (~scanf("%s",&t[0]))
{
for (i=1;i<4;i++)
scanf("%s",&t[i]);
for (i=0;i<4;i++)
if (t[i][0]=='A')
g[i+1]=1;
else if (t[i][0]=='J')
g[i+1]=11;
else if (t[i][0]=='Q')
g[i+1]=12;
else if (t[i][0]=='K')
g[i+1]=13;
else if (t[i][0]=='1')
g[i+1]=10;
else
g[i+1]=t[i][0]-48;
memset(b,255,sizeof(b));
for (p[1]=1;p[1]<=4;p[1]++) if (b[4][24]!=4)
for (p[2]=1;p[2]<=4;p[2]++) if ((p[1]!=p[2]) && (b[4][24]!=4))
for (p[3]=1;p[3]<=4;p[3]++) if ((p[1]!=p[3]) && (p[2]!=p[3]) && (b[4][24]!=4))
{
p[4]=10-p[1]-p[2]-p[3];
memset(b,255,sizeof(b));
b[1][g[p[1]]]=1;
for (i=2;i<=4;i++)
for (j=500;j>0;j--)
if (b[i-1][j]==i-1)
{
b[i][j+g[p[i]]]=i;
if (j>g[p[i]])
b[i][j-g[p[i]]]=i;
if (j<g[p[i]])
b[i][g[p[i]]-j]=i;
if (j*g[p[i]]<1000)
b[i][j*g[p[i]]]=i;
if (j%g[p[i]]==0)
b[i][j/g[p[i]]]=i;
if ((j!=0) && (g[p[i]]%j==0))
b[i][g[p[i]]/j]=i;
}
if (b[4][24]!=4)
{
memset(bx,255,sizeof(bx));
memset(by,255,sizeof(by));
bx[1][g[p[1]]]=1;
bx[2][g[p[1]]+g[p[2]]]=2;
if (g[p[1]]>g[p[2]])
bx[2][g[p[1]]-g[p[2]]]=2;
if (g[p[1]]<g[p[2]])
bx[2][g[p[2]]-g[p[1]]]=2;
bx[2][g[p[1]]*g[p[2]]]=2;
if (g[p[1]]%g[p[2]]==0)
bx[2][g[p[1]]/g[p[2]]]=2;
if (g[p[2]]%g[p[1]]==0)
bx[2][g[p[2]]/g[p[1]]]=2;
by[1][g[p[3]]]=1;
by[2][g[p[3]]+g[p[4]]]=2;
if (g[p[3]]>g[p[4]])
by[2][g[p[3]]-g[p[4]]]=2;
if (g[p[3]]<g[p[4]])
by[2][g[p[4]]-g[p[3]]]=2;
by[2][g[p[3]]*g[p[4]]]=2;
if (g[p[3]]%g[p[4]]==0)
by[2][g[p[3]]/g[p[4]]]=2;
if (g[p[4]]%g[p[3]]==0)
by[2][g[p[4]]/g[p[3]]]=2;
for (i=200;i>0;i--)
if (bx[2][i]==2)
for (j=200;j>0;j--)
if (by[2][j]==2)
if ((i+j==24) || (i-j==24) || (j-i==24) || (i*j==24) || ((i%j==0) && (i/j==24) || ((j%i==0) && (j/i==24))))
{
b[4][24]=4;
break;
}
}
}
if (b[4][24]==4)
puts("Yes");
else
puts("No");
}
return 0;
}
mafangsan
2016-04-17 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1万
采纳率:71%
帮助的人:2543万
展开全部
回溯是解这个问题的好方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
柠稔B8
2016-04-17 · TA获得超过3.1万个赞
知道大有可为答主
回答量:2.2万
采纳率:87%
帮助的人:3352万
展开全部
3×(10+4-6)=24 4-(-6÷3×10)=24 10-4-(-6)×3=24
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
758901873
2016-04-18 · TA获得超过251个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:71.7万
展开全部
对呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式