| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1316 人关注过本帖
标题:讨论24点算法。
只看楼主 加入收藏
我想要飞
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2004-6-15
收藏
 问题点数:0 回复次数:5 
讨论24点算法。

24点是扑克牌游戏 玩法是:从一副扑克的A到10里随意抽出4张牌 用‘加’’减‘‘乘’‘除’四个符号算出4个数是否等于24,是 的话成功,否的话失败; 我用的是穷举法!(源码有点长) 就是穷举出所有可能的算术式; 我们想设4张牌为W,X,Y,Z; 先把4张牌做排列组合: 如W;X;Y;Z; W;X;Z;Y; W;Y;X;Z; W;Y;Z;X; W;z;x;y; w;z;y;x; x;w;y;z; x;w;z;y; x;y;w;z; x;y;z;w; x;z;w;y; x;z;y;w; 等等 。。。24种排列: 然后在带如算术符号 如:+ + +;+ -+;+ * *;+ * /;+ + -; 等等穷举的所有算术符号;(目前我找到的共有43种 可能不全); 下面是我编的源码; #include"stdio.h" int kind(int a[4],int w,int x,int y,int z,int n) { switch(n) { case 1: a[0]=w;a[1]=x;a[2]=y;a[3]=z; case 2: a[0]=w;a[1]=x;a[2]=z;a[3]=y; case 3: a[0]=w;a[1]=y;a[2]=x;a[3]=z; case 4: a[0]=w;a[1]=y;a[2]=z;a[3]=x; case 5: a[0]=w;a[1]=z;a[2]=x;a[3]=y; case 6: a[0]=w;a[1]=z;a[2]=y;a[3]=x; case 7: a[0]=x;a[1]=w;a[2]=y;a[3]=z; case 8: a[0]=x;a[1]=w;a[2]=z;a[3]=y; case 9: a[0]=x;a[1]=y;a[2]=w;a[3]=z; case 10:a[0]=x;a[1]=y;a[2]=z;a[3]=w; case 11:a[0]=x;a[1]=z;a[2]=w;a[3]=y; case 12:a[0]=x;a[1]=z;a[2]=y;a[3]=z; ,。。。。。。。。。 。。。。。。。。。。。 。。。。。。。。。。。 。。。。。。。。。。。 case 24: a[0]=z;a[1]=y;a[2]=w;a[3]=x; } 因为没办法一下返回4个数字,所以就用数组来返回 被改变的4个数字;(如有更好的办法请告之) main() { int i,j,w,x,y,z,s,find=0; /w,x,y,z是4张牌s是牌的和 find 是找到标志*/ int a[4]; clrscr(); do{ printf("请输入4张牌的面值[1-10]“); scanf("%d %d %d %d",&w,&x,&y,&z); }while(w>=11||x>=11||y>=11||z>=11); for(j=1;j<=43;j++)/*穷举符号的排列次数*/ { switch(j) { case 1: for(i=1;i<=24;i++) { kind(a,w,x,y,z,i) s=a[0]+a[1]+a[2]+a[3]; if(s==24) { printf("%d+%d+%d+%d=24",a[0],a[1],a[2],a[3]); find=1;break; } }break; case 2: for(i=1;i<=24;i++) { kind(a,w,x,y,z,i); s=a[0]+a[1]+a[2]-a[3]; if(s==24) { printf("%d+%d+%d-%d=24",a[0],a[1],a[2],a[3]); find=1;break; } }break; case 3: for(i=1;i<=24;i++) { kind(a,w,x,y,z,i); s=a[0]+a[1]-a[2]+a[3]; if(s==24) { printf("%d+%d-%d+%d=24",a[0],a[1],a[2],a[3]); find=1;break; } }break; case 4: for(i=1;i<=24;i++) { kind(a,w,x,y,z,i); s=(a[0]+a[1]+a[2])*a[3];/*别忘了带括号*/ if(s==24) { printf("(%d+%d+%d)*%d=24",a[0],a[1],a[2],a[3]); find=1;break; } }break; case 5: ................. ................. ................ .............. ............... case 43: for(i=1;i<=24;i++) { kind(a,w,x,y,z,i); s=a[0]/a[1]a*[2]*a[3]; if(s==24) { printf("%d/%d*%d*%d=24",a[0],a[1],a[2],a[3]); find=1;break; } }break; } }break;

if(find==0)

printf("组不成24“); getch(); } 这到题我是在做同济大学题库里的排列组合是想到的 有什么更简单的方法就一起讨论讨论。。。。

[此贴子已经被作者于2004-10-19 00:13:12编辑过]

搜索更多相关主题的帖子: 算法 
2004-10-17 22:01
我想要飞
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2004-6-15
收藏
得分:0 

怎么没人顶啊

是不是写的不好????


个人宣言;黑暗的腹地,我睁开双眼, 世界哑口无言。。。
2004-10-18 22:51
longhao
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2004-9-10
收藏
得分:0 

好长的代码啊,晕死啊~


携手共进,陪伴彼此~
2004-10-18 23:14
我想要飞
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2004-6-15
收藏
得分:0 

长是长了点

你有短点的好点的么?

怎么不写出来?


个人宣言;黑暗的腹地,我睁开双眼, 世界哑口无言。。。
2004-10-18 23:16
bravelono
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-2-24
收藏
得分:0 
有时间我自己设计一下

2006-03-04 13:45
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
请问能不能带小括号啊?

♂ 死后定当长眠,生前何须久睡。♀
2006-03-04 21:46
快速回复:讨论24点算法。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023215 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved