| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1992 人关注过本帖
标题:转载乌鸦丘比特 的24点程序
只看楼主 加入收藏
chengstone
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:562
专家分:226
注 册:2004-4-3
结帖率:0
收藏
 问题点数:0 回复次数:16 
转载乌鸦丘比特 的24点程序

转载此帖的目的在于加强原创发表的技术性 提高大家参与的积极性 另外也可以使大家学习学习乌鸦丘比特这个程序的算法 大家共同进步么

如果谁要与他联系 crow2727@163.com 这个是他的email

[原创]较完善24点程序 24点的程序很多。除法一直是个头疼的问题。 我想出了一个半法用来解决除法: 定义work()函数————下面 算法:把每个整数看成分数,如4=4/1; work()是基于分数运算的函数,具体做法是分子分母分开运算; 如5/4+2/3=(5*3+2*4)/4*3 不做约分处理,假设结果为A/B则可用if(A==24*B)来判断; 可能情况除(a?b)?c?)d与(a?b)?(c?d)之外 还应该包含(a/(b?c))?d,(a-(b?c))?d;a/((b?c)?d);a/(b?(c?d)); 本代码可计算一些中间过程有分数出现的可能

代码如下:(很乱,没耐心不看没事的,知道算法就可以了 ) int work(int a,int b,int *c,int *d,int e) /*work ()为计算函数,a为第一个数的分子,*c为分子,b,*c同理*/ {int s; /* e为计算符号。1代表+,2代表-,3代表*,4代表*/ switch(e) /*work()返回计算结果分子,分母由指针*c返回*/ {case 1:s=(*d)*a+(*c)*b;*c=(*c)*(*d);break; case 2:s=(*d)*a-(*c)*b;*c=(*c)*(*d);break; case 3:s=a*b;*c=(*c)*(*d);break; case 4:s=a*(*d);*c=(*c)*b;break; } return s;} main() {int a[5],j,card[5],i1,i2,i3,i4,e[5],answer,count=0,aw1,aw2,n[5],yes=1,m=1,x; int *c;int *d;int *f;int *g; char get; while(yes) { a[1]=0; a[2]=0;a[3]=0;a[4]=0; printf("请输入数字:\n"); scanf("%d%d%d%d",&a[1],&a[2],&a[3],&a[4]); if(!(a[1]&&a[2]&&a[3]&&a[4])){printf("输入无效\n");continue;} for(i1=1;i1<=4;i1++) for(i2=1;i2<=4;i2++) {if(i1==i2)continue; for(i3=1;i3<=4;i3++) {if(i3==i2||i3==i1)continue; for(i4=1;i4<=4;i4++) {if(i4==i3||i4==i2||i4==i1)continue; /*洗牌,穷举所有顺序*/ card[1]=a[i1]; card[2]=a[i2]; card[3]=a[i3]; card[4]=a[i4]; for(e[1]=1;e[1]<=4;e[1]++) for(e[2]=1;e[2]<=4;e[2]++) { for(e[3]=1;e[3]<=4;e[3]++) /*穷举所有符号*/ {*c=1; *d=1; *f=1; *g=1; answer=work(card[1],card[2],c,d,e[1]);if(!(*c))m=0; /*计算((a?b)?c)?d*/ answer=work(answer,card[3],c,d,e[2]); if(!(*c))m=0; answer=work(answer,card[4],c,d,e[3]);if(!(*c))m=0; if((answer==((*c)*24))&&m) {for(j=1;j<=3;j++) {switch(e[j]) {case 1:n[j]='+';break; case 2:n[j]='-';break; case 3:n[j]='*';break; case 4:n[j]='/';break; }} printf("((%d%c%d)%c%d)%c%d=24\n",card[1],n[1],card[2],n[2],card[3],n[3],card[4]);getch(); count++;} *c=1; m=1; aw1=work(card[1],card[2],c,d,e[1]); if(!(*c))m=0; /*计算(a?b)?(c?d)*/ aw2=work(card[3],card[4],f,g,e[2]); if(!(*f))m=0; answer=work(aw1,aw2,c,f,e[3]); if(!(*c))m=0; if((answer==((*c)*24))&&m) {for(j=1;j<=3;j++) {switch(e[j]) {case 1:n[j]='+';break; case 2:n[j]='-';break; case 3:n[j]='*';break; case 4:n[j]='/';break; }} printf("(%d%c%d)%c(%d%c%d)=24\n",card[1],n[1],card[2],n[3],card[3],n[2],card[4]);getch(); count++;}

} x=4;*c=1;*d=1; answer=work(card[1],card[2],c,d,e[1]);if(!(*c))m=0; /*计算a/((b?c)?d)*/ answer=work(answer,card[3],c,d,e[2]); if(!(*c))m=0;*c=1; answer=work(card[4],answer,d,c,x);if(!(*d))m=0; if((answer==((*c)*24))&&m) {for(j=1;j<=2;j++) {switch(e[j]) {case 1:n[j]='+';break; case 2:n[j]='-';break; case 3:n[j]='*';break; case 4:n[j]='/';break; }} printf("%d/((%d%c%d)%c%d)=24\n",card[4],card[1],n[1],card[2],n[2],card[3]);getch(); count++;} m=1;*c=1;*d=1; answer=work(card[1],card[2],c,d,e[1]);if(!(*c))m=0; /*计算a/(b?(c?d))*/ answer=work(card[3],answer,d,c,e[2]); if(!(*d))m=0; *c=1; answer=work(card[4],answer,c,d,x);if(!(*c))m=0; if((answer==((*c)*24))&&m) {for(j=1;j<=2;j++) {switch(e[j]) {case 1:n[j]='+';break; case 2:n[j]='-';break; case 3:n[j]='*';break; case 4:n[j]='/';break; }} printf("%d/(%d%c(%d%c%d))=24\n",card[4],card[3],n[2],card[1],n[1],card[2]);getch(); count++;

}m=1;*c=1;*d=1; answer=work(card[1],card[2],c,d,e[1]);if(!(*c))m=0; /*计算(a-(b?c))?d*/ answer=work(card[3],answer,d,c,2);if(!(*d))m=0; *c=1; answer=work(answer,card[4],d,c,e[2]); if(!(*d))m=0;

if((answer==((*d)*24))&&m) {for(j=1;j<=2;j++) {switch(e[j]) {case 1:n[j]='+';break; case 2:n[j]='-';break; case 3:n[j]='*';break; case 4:n[j]='/';break; }}printf("(%d-(%d%c%d))%c%d=24\n",card[3],card[1],n[1],card[2],n[2],card[4]);getch(); count++;} m=1;*c=1;*d=1; answer=work(card[1],card[2],c,d,e[1]);if(!(*c))m=0; answer=work(card[3],answer,d,c,4);if(!(*d))m=0; *c=1; answer=work(answer,card[4],d,c,e[2]); if(!(*d))m=0;

if((answer==((*d)*24))&&m) /*计算(a/(b?c))?d*/ {for(j=1;j<=2;j++) {switch(e[j]) {case 1:n[j]='+';break; case 2:n[j]='-';break; case 3:n[j]='*';break; case 4:n[j]='/';break; }}printf("(%d/(%d%c%d))%c%d=24\n",card[3],card[1],n[1],card[2],n[2],card[4]);getch(); count++;}

}

}}}if(!count)printf("对不起,无解\n");count=0;}}

[此贴子已经被作者于2004-07-20 12:13:23编辑过]

搜索更多相关主题的帖子: 丘比特 乌鸦 
2004-07-08 11:39
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

自己的东东,顶一下。老版,今天刚看邮箱,看到你的邮件,就来报名咯,以后还要多多指教。

[此贴子已经被作者于2004-07-19 18:33:46编辑过]


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-19 16:33
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

我的程序还有一个缺点——输出时有重复出现(由于穷举产生的)。

不知道大家有什么办法,讨论一下。


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-19 16:49
chengstone
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:562
专家分:226
注 册:2004-4-3
收藏
得分:0 

欢迎欢迎 等了你好久

刚刚执行了一下 出现两个错误和五个警告

错误 noname.c 2: 不可预料的文件结束在注解第 2 行在 work 函数中 错误 noname.c 146: 复合指令缺少 }在 work 函数中

不过算法还是值得研究的


qq:69558139
2004-07-19 18:57
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
以下是引用chengstone在2004-07-19 18:57:37的发言:

欢迎欢迎 等了你好久

刚刚执行了一下 出现两个错误和五个警告

错误 noname.c 2: 不可预料的文件结束在注解第 2 行在 work 函数中 错误 noname.c 146: 复合指令缺少 }在 work 函数中

不过算法还是值得研究的

把注解第2行的“*”前/去掉就好了。老版编辑一下

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-19 21:42
chengstone
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:562
专家分:226
注 册:2004-4-3
收藏
得分:0 

恩 刚刚试过了 算法好厉害 真值得学习

乌鸦兄弟有什么原创的好程序 欢迎发表出来


qq:69558139
2004-07-20 12:14
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

我其实还是个初学者,只知道基本的语言和数据结构,对图形编程等都还是一窍不通。

所以还要多学习学习啊。


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-20 14:35
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
有意思,把所有情况都考虑进去了,的确直接解决了我对这个问题的困惑

淘宝杜琨
2004-07-20 17:00
忆楠
Rank: 1
等 级:新手上路
帖 子:721
专家分:0
注 册:2004-7-5
收藏
得分:0 

chengstone 乌鸦丘比特 我很欣赏你们 虽然我的水平不如你们 不过值得收藏学习


点 鼠 标 , 救 饥 民 http://www./
2004-08-01 16:58
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
收藏
得分:0 
好厉害!自叹不如!

2004-10-01 02:32
快速回复:转载乌鸦丘比特 的24点程序
数据加载中...
 
   



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

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