计算24点 C语言/*很多年过去了,每当想起儿时跟表弟玩计算24的游戏时的情景,还会情不自禁地微微一笑.游戏的规则很简单:一副扑克牌,乱序后每局抽出4张,计算牌面点数经四则运算是否能得

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/29 18:11:46
计算24点 C语言/*很多年过去了,每当想起儿时跟表弟玩计算24的游戏时的情景,还会情不自禁地微微一笑.游戏的规则很简单:一副扑克牌,乱序后每局抽出4张,计算牌面点数经四则运算是否能得
xYmOX+#h.8qB3V;j;* QꌪJaxK$T@yoJ):v>/칾v'0 Q|}yysιv웱[ު7+_h]m+{i /(">"ڇCQRyΔ@C{=S_KHtq5=wÓY]BV25^\$,<Oͮ8>'0ӀSBJ@%ms@˿D^TޞdvE˃=+dibOk%zm -7AHz\90O֒ @YMtj.dE)I9[ @Q#-9Ap^^S roc27D6zsy`ZW 4׿![]G~ߧ&|t jv/m!w&djC-PAN@G28@X~;x-hg,UbK~ GY>6`5|Rx +NK.>U*C@R@Ym2*ъTUR 8QxlR)'#,|F9Nim P" 綕eufBQɬr"+a`} Fcn=!%N><-@5a<C)08fIfBف@bhL/> Xǥ$~=w!frkwn*no dї)]/ˋ т ArUI Rg&hUy͜)OSrlVvfM )2A0A:U!w3ȩj<0ZzY#2)$M-o(EI6Jb8ne`$[1=+'s&u*zP^$P9:N57rTH$~IKOw~;}r4E‰pe֢y{LG ;cc j4.Lz8HJ%MO}q8oS_zVnim"'ć;L[m>zlq͚NJZ(*=P,3{IYPY±N/::: ]q)ȺEI4b*/fV,.%QgjJ֛h/HPTn'~ ݢǹ%iۮ7mT#ʏ>s:H2}a5,I ʔ .N8߮uV6 FRY vuV8*k^/Z99mzV8:9~z; -.W\[ ;aF۵kjjoIkDcq } 8{\sMG)!q?Կ eݞ^fGZkTo{Z-dBs&ro'_"dbqnj4rfr7!WŒV 9lVӦl^"G]w!$G~_ yrbDEӰ#;1{DRL7!u97SDZ[_g|h͋)ېM.ǃ- g%1? (@ uUJ?B`كOǂq% K] 08HlAW*_tL0m@A]W PvlM\q4?%+9>ԛWJ=ܺds㩪&3csu4mt o+'=4Bбr1 D.==5$, 9 E8L bl+BcCM#=%sS8ř_xAHνOO{4Nj:4٣3ug9?+ǻspぷVV)24qlZl|Z1LJaFUbf: CL_Ur)uRpHJcBl<5d'-]7G&JHr=0k<B.o,ʎed*#2],BD[vj ]P(80kAj-hX Z4lң`nuQC4kQйMrvjt:Dс_sv0پAUllTl}YUyӪ͗1k1z;~Gҧ5_akpdy5o%]n|"cnb#4^R'G:ɬQ?Ѝϸ8_x8,G-=~Da\2N珫oW{$W݆PX8z

计算24点 C语言/*很多年过去了,每当想起儿时跟表弟玩计算24的游戏时的情景,还会情不自禁地微微一笑.游戏的规则很简单:一副扑克牌,乱序后每局抽出4张,计算牌面点数经四则运算是否能得
计算24点 C语言
/*很多年过去了,每当想起儿时跟表弟玩计算24的游戏时的情景,还会情不自禁地微微一笑.
游戏的规则很简单:一副扑克牌,乱序后每局抽出4张,计算牌面点数经四则运算是否能得到24.先计算出的人扼要说出计算方法,验证无误后获得本局比赛胜利,得到4张牌.全部牌用完后谁手中的牌多即获得最后的胜利!
如2,2,2,3,常常看到你争我抢的局面,而有的题目则不太容易算出,甚至可能误判为无解,如2,4,9,10……
现在,我们都学会了编程.为了在多年后再一争高下,我们决定进行一次新的比拼:看谁写出的程序能既快又准地算出结果!比赛的基本规则不变,即仍是每局4个整数,运用四则运算(可以加括号),但为了降低程序设计的难度,除法的结果只保留整数部分,即5/2=2.
怎么样,你是不是也想加入我们的比赛呢?看看谁能获得最后的胜利!
输入:
本题包含多个测例.
数据的第一行有一个整数N(0从第二行开始的N行,各包含4个不大于15的以空格分隔的非零整数.
输出:
对于每个测例,如果可以计算得到24,则输出“Yes”,否则输出“No”.每个输出占一行.
输入样例:
2
2 2 3 3
2 4 9 10
输出样例:
Yes
Yes
*/
要是知道是谁出的,早把他揪出来切了.
四楼能给稍微注释一下下不?

计算24点 C语言/*很多年过去了,每当想起儿时跟表弟玩计算24的游戏时的情景,还会情不自禁地微微一笑.游戏的规则很简单:一副扑克牌,乱序后每局抽出4张,计算牌面点数经四则运算是否能得
//24点分析(穷举法)
//
#include
#include
#include
typedef struct D_NODE
{
int data;
struct D_NODE *left,*right;
} NODE24;
NODE24 head;
int res=24;
int maketree(int *src,int *i, NODE24 *p)
{
int d=src[*i];
(*i)++;
switch (d)
{
case '+':
case '-':
case '*':
case '/':
p->left=new NODE24;
p->right=new NODE24;
p->data=d;
maketree(src,i,p->left);
maketree(src,i,p->right);
break;
default:
p->data=d;
p->left=NULL;
p->right=NULL;
}
return 0;
}
int cmaketree(NODE24 *p)
{
int c;
c=getch();
putchar(c);
switch (c)
{
case '+':
case '-':
case '*':
case '/':
p->left=new NODE24;
p->right=new NODE24;
p->data=c;
cmaketree(p->left);
cmaketree(p->right);
break;
default:
p->data=c-'0';
p->left=NULL;
p->right=NULL;
}
return 0;
}
int work(struct D_NODE *d)
{
int res=0;
if (d->left==NULL&&d->right==NULL)
res=d->data;
else
{
int a,b;
a=work(d->left);
b=work(d->right);
switch (d->data)
{
case '+':
res=a+b;//work(d->left)+work(d->right);
break;
case '-':
res=a-b;//work(d->left)-work(d->right);
break;
case '*':
res=a*b;//work(d->left)*work(d->right);
break;
case '/':
if (b!=0)
res=(a%b==0)?a/b:-79;
else
res=-79;
//res=work(d->right)?work(d->left)/work(d->right):-79;
break;
}
}
return res;
}
int destroy(struct D_NODE *d)
{
if (d->left==NULL&&d->right==NULL)
delete d;
else
{
destroy(d->left);
d->left=NULL;
destroy(d->right);
d->right=NULL;
if (d != &head)
delete d;
}
return 0;
}
int show(struct D_NODE *d)
{
if (d->left==NULL && d->right==NULL)
printf("%d",d->data);
else
{
printf("(");
show(d->left);
printf("%c",d->data);
show(d->right);
printf(")");
}
return 0;
}
/* int input()
{
//int buf[30]=,idx=0;
//maketree(buf,&idx,&head);
int buf[20],idx=0;
printf("\nPlease Input:");
for (idx=0;idx<20;idx++)
{
buf[idx]=getch();
printf("%c",buf[idx]);
}
idx=0;
maketree(buf,&idx,&head);
return 0;
} */
#define test(p1,p2,p3,p4,p5,p6,p7) {exp[0]=(p1),exp[1]=(p2), \
exp[2]=(p3),exp[3]=(p4),exp[4]=(p5),exp[5]=(p6),exp[6]=(p7); \
idx=0; \
maketree(exp,&idx,&head); \
if (work(&head)==res) \
{ \
found++;printf("%5d: ",found);show(&head);\
if (!(found%3)) printf("\n");\
} \
destroy(&head);\
}
// printf("%d,%d,%d,%d,%d,%d,%d\n",p1,p2,p3,p4,p5,p6,p7); \
int test24()
{
int num[4],opc[4]=,exp[20];
int i1,i2,i3,i4,ic1,ic2,ic3,idx,found=0;
char prompt[]="24点游戏分析\n易华卫 12/17/2000\n";
printf("%s",prompt);
for (i1=0;i1<4;i1++)
{
printf("请输入第%d个数字: ",i1+1);
scanf("%d",num+i1);
//num[i1]=num[i1]%13+1;
}
printf("\n你已经输入了:%d,%d,%d,%d四个数字!\n",num[0],num[1],num[2],num[3]);
printf("\n请输入要计算的结果值,(当然二十四点就输入24啦!):");
scanf("%d",&res);
printf("OK! 按任意键就可以开始了!\n");
getch();
for (i1=0;i1<4;i1++)
for (i2=0;i2<4;i2++)
if (i2!=i1)
for (i3=0;i3<4;i3++)
if (i3!=i1&&i3!=i2)
for (i4=0;i4<4;i4++)
if (i4!=i1&&i4!=i2&&i4!=i3)
for (ic1=0;ic1<4;ic1++)
for (ic2=0;ic2<4;ic2++)
for (ic3=0;ic3<4;ic3++)
{
test(opc[ic1],opc[ic2],opc[ic3],num[i1],num[i2],num[i3],num[i4]);
test(opc[ic1],opc[ic2],num[i1],opc[ic3],num[i2],num[i3],num[i4]);
test(opc[ic1],opc[ic2],num[i1],num[i2],opc[ic3],num[i3],num[i4]);
test(opc[ic1],num[i1],opc[ic2],opc[ic3],num[i2],num[i3],num[i4]);
test(opc[ic1],num[i1],opc[ic2],num[i2],opc[ic3],num[i3],num[i4]);
}
printf("\n共找到了 %d 条正确的计算方法!(很抱歉,我没有处理交换率*^_^*)\n",found);
return 0;
}
main()
{
// fflush(stdin);
// input();
// cmaketree(&head);
// printf("\n=%d\n",work(&head));
test24();
return 0;
}