Algorithm 版 (精华区)
发信人: sino (茶水博士), 信区: Theory
标 题: 24点程序
发信站: 哈工大紫丁香 (Sun Aug 27 13:29:17 2000), 转信
发信人: yuanyuan (源源), 信区: algorithm
发信站: NJU Lily BBS (Sat May 22 00:29:34 1999), 站内信件
#include <stdio.h>
#include <math.h>
int find_solution(float*,int,int,int,int,int,int,int);
void main(void)
{
float a[4];
char b[4]={'+','-','*','/'};
int count=0,result;
int i,j,k,l,m1,m2,m3;
printf("Please input four card(One,Two,Three,Four):");
scanf("%f,%f,%f,%f",&a[0],&a[1],&a[2],&a[3]);
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(j==i)
continue;
for(k=0;k<4;k++)
{
if(k==i||k==j)
continue;
for(l=0;l<4;l++)
{
if(l==i||l==j||l==k)
continue;
for(m1=0;m1<4;m1++)
{
for(m2=0;m2<4;m2++)
{
for(m3=0;m3<4;m3++)
{
if((result=find_solution(a,i,j,k,l,m1,m2,m3))!=0)
{
switch(result)
{
case 1:
printf("Solution %d:((%2.0f%c%2.0f)%c%2.0f)%c%2.0f\n",count,a[i],b[m1]
,a[j],b[m2],a[k],b[m3],a[l]);
break;
case 2:
printf("Solution %d:(%2.0f%c%2.0f)%c(%2.0f%c%2.0f)\n",count,a[i],b[m1]
,a[j],b[m2],a[k],b[m3],a[l]);
break;
case 3:
printf("Solution %d:(%2.0f%c(%2.0f%c%2.0f))%c%2.0f\n",count,a[i],b[m1]
,a[j],b[m2],a[k],b[m3],a[l]);
break;
case 4:
printf("Solution %d:%2.0f%c((%2.0f%c%2.0f)%c%2.0f)\n",count,a[i],b[m1]
,a[j],b[m2],a[k],b[m3],a[l]);
break;
case 5:
printf("Solution %d:%2.0f%c(%2.0f%c(%2.0f%c%2.0f))\n",count,a[i],b[m1]
,a[j],b[m2],a[k],b[m3],a[l]);
break;
default:break;
}
count++;
}
}
}
}
}
}
}
}
if(count==0)
printf("No solution!\n");
}
int find_solution(float *a,int i,int j,int k,int l,int m1,int m2,int m3)
{
char b[4]={'+','-','*','/'};
float y=0,y1,y2;
switch(b[m1])
{
case '+':y=a[i]+a[j];break;
case '-':y=a[i]-a[j];break;
case '*':y=a[i]/a[j];break;
}
switch(b[m2])
{
case '+':y=y+a[k];break;
case '-':y=y-a[k];break;
case '*':y=y*a[k];break;
case '/':y=y/a[k];break;
}
switch(b[m3])
{
case '+':y=y+a[l];break;
case '-':y=y-a[l];break;
case '*':y=y*a[l];break;
case '/':y=y/a[l];break;
}
if(fabs(y-24.0)<0.1)
return(1);
y=0;y1=0;
switch(b[m1])
{
case '+':y=a[i]+a[j];break;
case '-':y=a[i]-a[j];break;
case '*':y=a[i]*a[j];break;
case '/':y=a[i]/a[j];break;
}
switch(b[m3])
{
case '+':y1=a[k]+a[l];break;
case '-':y1=a[k]-a[l];break;
case '*':y1=a[k]*a[l];break;
case '/':y1=a[k]/a[l];break;
}
switch(b[m2])
{
case '+':y=y+y1;break;
case '-':y=y-y1;break;
case '*':y=y*y1;break;
case '/':if(y1==0.0) y1=0.001;y=y/y1;break;
}
if(fabs(y-24.0)<0.1)
return(2);
y=0;y1=0;
switch(b[m2])
{
case '+':y1=a[j]+a[k];break;
case '-':y1=a[j]-a[k];break;
case '*':y1=a[j]*a[k];break;
case '/':y1=a[j]/a[k];break;
}
switch(b[m1])
{
case '+':y=a[i]+y1;break;
case '-':y=a[i]-y1;break;
case '*':y=a[i]*y1;break;
case '/':if(y1==0.0) y1=0.001;y=a[i]/y1;break;
}
switch(b[m3])
{
case '+':y=y+a[l];break;
case '-':y=y-a[l];break;
case '*':y=y*a[l];break;
case '/':y=y/a[l];break;
}
if(fabs(y-24.0)<0.1)
return(3);
y=0;y1=0;
switch(b[m2])
{
case '+':y1=a[j]+a[k];break;
case '-':y1=a[j]-a[k];break;
case '*':y1=a[j]*a[k];break;
case '/':y1=a[j]/a[k];break;
}
switch(b[m3])
{
case '+':y1=y1+a[l];break;
case '-':y1=y1-a[l];break;
case '*':y1=y1*a[l];break;
case '/':y1=y1/a[l];break;
}
switch(b[m1])
{
case '+:y=a[i]+y1;break;
case '-':y=a[i]-y1;break;
case '*':y=a[i]*y1;break;
case '/':if(y1==0.0) y1=0.001;y=a[i]/y1;break;
}
if(fabs(y-24.0)<0.1)
return(4);
y=0;y1=0;y2=0;
switch(b[m3])
{
case '+':y1=a[k]+a[l];break;
case '-':y1=a[k]-a[l];break;
case '*':y1=a[k]*a[l];break;
case '/':y1=a[k]/a[l];break;
}
switch(b[m2])
{
case '+':y2=a[j]+y1;break;
case '-':y2=a[j]-y1;break;
case '*':y2=a[j]*y1;break;
case '/':if(y1==0.0) y1=0.001;y2=a[j]/y1;break;
}
switch(b[m1])
{
case '+':y=a[i]+y2;break;
case '-':y=a[i]-y2;break;
case '*':y=a[i]*y2;break;
case '/':if(y2==0.0) y2=0.001;y=a[i]/y2;break;
}
if(fabs(y-24.0)<0.1)
return(5);
return(0);
}
--
<><><><><><><><><><><><><><><><><><><><><><><>
<> I AM A BIRD!I WANT FLY! <>
<><><><><><><><><><><><><><><><><><><><><><><>
※ 修改:.fib 於 Aug 27 13:26:58 修改本文.[FROM: bbs.hit.edu.cn]
--
※ 转寄:.南京大学小百合 bbs.nju.edu.cn.[FROM: bbs.hit.edu.cn]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: fib.bbs@bbs.nju.edu.]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.487毫秒