| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3466 人关注过本帖
标题:算术问题(24点)
只看楼主 加入收藏
yamz_1983
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2005-11-7
收藏
得分:0 
我的想法:
把a,b,c,d,+,-,*,/
都看成字符,然后象ABCDEFGH一样用递归的算法列出所有可能排列,
然后算出列出正确的,不知是否可行.

2006-06-02 19:45
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-02 20:34
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-02 20:50
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-02 20:50
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
用逆波兰表达式与栈解决问题,括号何须之有?

以模式1为例:((a + b)× c)-d
表为 a b + c × d -

以模式2为例:(a + b)×(c-d)
表为 a b + c d - ×


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-02 21:59
youxiaxyz
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-4-5
收藏
得分:0 
15楼:我开始也想到了波兰表达式,这样就可以避免括号了
但是这样到具体实现时,还是有很多问题!(我的感觉)

[此贴子已经被作者于2006-6-2 22:34:07编辑过]

2006-06-02 22:32
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(youxiaxyz)15楼:我开始也想到了波兰表达式,...
以下是引用youxiaxyz在2006-6-2 22:32:00的发言:
15楼:我开始也想到了波兰表达式,这样就可以避免括号了
但是这样到具体实现时,还是有很多问题!(我的感觉)

还有pi的问题。唉,这些都是前人玩腻了的东东。你google一下就OK了。

例如http://www.chinaschool.org/aosai/axpy/sjjg/sfsj/data1.htm

关键是用“栈”实现。

[此贴子已经被作者于2006-6-2 22:52:54编辑过]


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-02 22:43
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
去看看数据结构中 表达式的计算

应该在栈那章附近..里面包括对括号的操作!

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-06-02 22:45
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
这个是我以前编的24点,虽然没完全符合要求,但勉强可以看一下.
我在这个程序并没有把结果完全输出来,不过您改一下应该还是比较简单的,
至于如果要用综合式子把结果打印出来的话,还要加入一些包装,您也自己写吧.

#include<stdio.h>
#include<math.h>
int flag=0;
void calculate(float a,float b,float *p)
{
*(p++)=a+b;
*(p++)=a-b;
*(p++)=b-a;
*(p++)=a*b;
if(b!=0)
*(p++)=a/b;
else *(p++)=20027;
if(a!=0)
*(p)=b/a;
else *p=20027;
}
void function (float a,float b,float c,float d)
{
float a1[6]={0},a2[6]={0},result[6]={0};
int i,j,k;
calculate(a,b,a1);
calculate(c,d,a2);
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
calculate(a1[i],a2[j],result);
for(k=0;k<6;k++)
if(fabs((double)24-result[k])<1e-3)
{
switch(i)
{
case 0:printf("%.0f+%.0f=%.0f\n",a,b,a1[0]);break;
case 1:printf("%.0f-%.0f=%.0f\n",a,b,a1[1]);break;
case 2:printf("%.0f-%.0f=%.0f\n",b,a,a1[2]);break;
case 3:printf("%.0f*%.0f=%.0f\n",a,b,a1[3]);break;
case 4:printf("%.0f/%.0f=%g\n",a,b,a1[4]);break;
case 5:printf("%.0f/%.0f=%g\n",b,a,a1[5]);break;
}
switch(j)
{
case 0:printf("%.0f+%.0f=%.0f\n",c,d,a2[0]);break;
case 1:printf("%.0f-%.0f=%.0f\n",c,d,a2[1]);break;
case 2:printf("%.0f-%.0f=%.0f\n",d,c,a2[2]);break;
case 3:printf("%.0f*%.0f=%.0f\n",c,d,a2[3]);break;
case 4:printf("%.0f/%.0f=%g\n",c,d,a2[4]);break;
case 5:printf("%.0f/%.0f=%g\n",d,c,a2[5]);break;
}
switch(k)
{
case 0:printf("%g+%g=%g\n",a1[i],a2[j],result[0]);break;
case 1:printf("%g-%g=%g\n",a1[i],a2[j],result[1]);break;
case 2:printf("%g-%g=%g\n",a2[j],a1[i],result[2]);break;
case 3:printf("%g*%g=%g\n",a1[i],a2[j],result[3]);break;
case 4:printf("%g/%g=%g\n",a1[i],a2[j],result[4]);break;
case 5:printf("%g/%g=%g\n",a2[j],a1[i],result[5]);break;
}
flag=1;/*标记已计算出来*/
i=6;
j=6;
break;
}
}
if(flag==0)
{
for(i=0;i<6;i++)
{
calculate(a1[i],c,a2);
for(j=0;j<6;j++)
{
calculate(a2[j],d,result);
for(k=0;k<6;k++)
if(fabs(24-result[k])<0.001)
{
switch(i)
{
case 0:printf("%.0f+%.0f=%.0f\n",a,b,a1[0]);break;
case 1:printf("%.0f-%.0f=%.0f\n",a,b,a1[1]);break;
case 2:printf("%.0f-%.0f=%.0f\n",b,a,a1[2]);break;
case 3:printf("%.0f*%.0f=%.0f\n",a,b,a1[3]);break;
case 4:printf("%.0f/%.0f=%g\n",a,b,a1[4]);break;
case 5:printf("%.0f/%.0f=%g\n",b,a,a1[5]);break;
}
switch(j)
{
case 0:printf("%g+%.0f=%g\n",a1[i],c,a2[0]);break;
case 1:printf("%g-%.0f=%g\n",a1[i],c,a2[1]);break;
case 2:printf("%.0f-%g=%g\n",c,a1[i],a2[2]);break;
case 3:printf("%g*%.0f=%g\n",a1[i],c,a2[3]);break;
case 4:printf("%g/%.0f=%g\n",a1[i],c,a2[4]);break;
case 5:printf("%.0f/%g=%g\n",c,a1[i],a2[5]);break;
}
switch(k)
{
case 0:printf("%g+%.0f=%g\n",a2[j],d,result[0]);break;
case 1:printf("%g-%.0f=%g\n",a2[j],d,result[1]);break;
case 2:printf("%.0f-%g=%g\n",d,a2[j],result[2]);break;
case 3:printf("%g*%.0f=%g\n",a2[j],d,result[3]);break;
case 4:printf("%g/%.0f=%g\n",a2[j],d,result[4]);break;
case 5:printf("%.0f/%g=%g\n",d,a2[j],result[5]);break;
}
flag=1;/*标记已计算出来*/
i=6;
j=6;
break;
}
}
}
if(flag==0)
{
for(i=0;i<6;i++)
{
calculate(a1[i],d,a2);
for(j=0;j<6;j++)
{
calculate(a2[j],c,result);
for(k=0;k<6;k++)
if(fabs(24-result[k])<0.001)
{
switch(i)
{
case 0:printf("%.0f+%.0f=%.0f\n",a,b,a1[0]);break;
case 1:printf("%.0f-%.0f=%.0f\n",a,b,a1[1]);break;
case 2:printf("%.0f-%.0f=%.0f\n",b,a,a1[2]);break;
case 3:printf("%.0f*%.0f=%.0f\n",a,b,a1[3]);break;
case 4:printf("%.0f/%.0f=%g\n",a,b,a1[4]);break;
case 5:printf("%.0f/%.0f=%g\n",b,a,a1[5]);break;
}
switch(j)
{
case 0:printf("%g+%.0f=%g\n",a1[i],d,a2[0]);break;
case 1:printf("%g-%.0f=%g\n",a1[i],d,a2[1]);break;
case 2:printf("%.0f-%g=%g\n",d,a1[i],a2[2]);break;
case 3:printf("%g*%.0f=%g\n",a1[i],d,a2[3]);break;
case 4:printf("%g/%.0f=%g\n",a1[i],d,a2[4]);break;
case 5:printf("%.0f/%g=%g\n",d,a1[i],a2[5]);break;
}
switch(k)
{
case 0:printf("%g+%.0f=%g\n",a2[j],c,result[0]);break;
case 1:printf("%g-%.0f=%g\n",a2[j],c,result[1]);break;
case 2:printf("%.0f-%g=%g\n",c,a2[j],result[2]);break;
case 3:printf("%g*%.0f=%g\n",a2[j],c,result[3]);break;
case 4:printf("%g/%.0f=%g\n",a2[j],c,result[4]);break;
case 5:printf("%.0f/%g=%g\n",c,a2[j],result[5]);break;
}
flag=1;
i=6;
j=6;
break;
}
}
}
}
}
}
main()
{
float a,b,c,d;
printf("Please input four number between 1-12:\n");
scanf("%f%f%f%f",&a,&b,&c,&d);
function(a,b,c,d);
if(!flag)
{
function(b,c,a,d);
if(!flag)
{
function(c,d,a,b);
if(!flag)
{
function(a,d,b,c);
if(!flag)
{
function(a,c,b,d);
if(!flag)
function(b,d,a,c);
}
}
}
}
if(!flag)
printf("Sorry,the four number can't be calculated out!");
getch();
}

对不礼貌的女生收钱......
2006-06-03 10:02
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-03 10:05
快速回复:算术问题(24点)
数据加载中...
 
   



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

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