主题:24点问题
小露
[专家分:20] 发布于 2004-03-27 22:31:00
不知道你玩过24点吗?就是任意给你4个数字,你用+,-,*,/运算符去得到24。
有兴趣的试试看呢,我是没思考出来,高手来指教!
回复列表 (共17个回复)
沙发
jackin0627 [专家分:1270] 发布于 2004-03-27 22:38:00
/***在TC2.0下运行****/
#include<conio.h>
#include<math.h>
#include<conio.h>
main()
{
int x[4],y[3];
float num[4],r=0;
int i;
char sig[4]={'+','-','*','/'};
clrscr();
printf("Please input 4 integers:");
for(i=0;i<4;i++)
scanf("%f",&num[i]);
for(x[0]=0;x[0]<4;x[0]++)
for(x[1]=0;x[1]<4;x[1]++)
{
if(x[1]==x[0])continue;
for(x[2]=0;x[2]<4;x[2]++)
{
if(x[2]==x[1]||x[2]==x[0])continue;
for(x[3]=0;x[3]<4;x[3]++)
{
if(x[3]==x[0]||x[3]==x[1]||x[3]==x[2])continue;
for(y[0]=0;y[0]<4;y[0]++)
for(y[1]=0;y[1]<4;y[1]++)
for(y[2]=0;y[2]<4;y[2]++)
{
r=num[x[0]];
for(i=1;i<4;i++)
{
switch(y[i-1])
{
case 0:r=(float)(r+num[x[i]]);break;
case 1:r=(float)(r-num[x[i]]);break;
case 2:r=(float)(r*num[x[i]]);break;
case 3:r=(float)(r/num[x[i]]);break;
default:break;
}
}
if(fabs(r-24.0)<0.001)
{
printf("\n [(%d%c%d)%c%d]%c%d=24",(int)num[x[0]],sig[y[0]],(int)num[x[1]],sig[y[1]],(int)num[x[2]],sig[y[2]],(int)num[x[3]]);
goto end;
}
}
}
}
}
printf("No answer!");
end:
getch();
}
板凳
yjzflag [专家分:40] 发布于 2004-03-27 23:29:00
1楼的能给出详细的流程图或算法吗
看不懂吖
3 楼
jtchang [专家分:5370] 发布于 2004-03-28 01:17:00
呵呵!不好噢!
5 5 5 1 是 No answer!
想知道answer是什么吗? (5-1/5)*5 = 24
(^_^)
4 楼
jackin0627 [专家分:1270] 发布于 2004-03-28 08:57:00
这确实是我忽略的地方,
一定要修改!!!!!!!!!!!
多谢3楼!!!
5 楼
jackin0627 [专家分:1270] 发布于 2004-03-28 13:21:00
这是我改进后的程序,
请3楼的仁兄和各位看一看还有没有疏忽
#include<conio.h>
#include<math.h>
#include<conio.h>
#include<string.h>
char sig[4]={'+','-','*','/'};
void fun(float n[],char ch[][50],int m)
{
int x[2],y,i,j;
float num[4];
char cc[4][50];
if(m==1)
{
if(fabs(n[0]-24.0)<0.0001)
{
printf("\n%s=24",ch[0]);
getch();
exit(0);
}
}
else
{
for(x[0]=0;x[0]<m;x[0]++)
{
for(x[1]=0;x[1]<m;x[1]++)
{
if(x[1]==x[0])continue;
for(y=0;y<4;y++)
{
switch(y)
{
case 0: num[0]=n[x[0]]+n[x[1]];break;
case 1: num[0]=n[x[0]]-n[x[1]];break;
case 2: num[0]=n[x[0]]*n[x[1]];break;
case 3: if(n[x[1]]==0)break;
num[0]=n[x[0]]/n[x[1]];break;
default:break;
}
if(y!=3||n[x[1]]!=0)
sprintf(cc[0],"(%s%c%s)",ch[x[0]],sig[y],ch[x[1]]);
for(i=0,j=1;i<m;i++)
if(i!=x[0]&&i!=x[1])
{
num[j]=n[i];
strcpy(cc[j],ch[i]);
j++;
}
fun(num,cc,m-1);
}
}
}
}
}
/***********************/
main()
{
float num[4];
int i;
char cx[4][50];
clrscr();
printf("Please input 4 integers:");
for(i=0;i<4;i++)
scanf("%f",&num[i]);
for(i=0;i<4;i++)
{
sprintf(cx[i],"%d",(int)num[i]);
}
fun(num,cx,4);
printf("no answer!");
getch();
}
6 楼
小露 [专家分:20] 发布于 2004-03-28 13:26:00
可以用C++去写吗?我对C不熟悉……
7 楼
jackin0627 [专家分:1270] 发布于 2004-03-28 13:34:00
不是吧,
楼主,
你看一下程序:
把算法弄懂了,
自己编吧,
我是比较喜欢用TC编写程序
8 楼
小露 [专家分:20] 发布于 2004-03-28 18:56:00
好吧,谢谢你哦
9 楼
doact [专家分:100] 发布于 2004-04-07 23:23:00
不错...思路很好!
10 楼
紫忆 [专家分:2480] 发布于 2005-01-31 12:45:00
还是有问题啊~~如果输入浮点数会出现错误,不过我用的是tc3.0,请大家试试~~!
我来回复