#include "stdio.h"
#include "math.h"
#define L1(x) sign[x%4]
#define L2(x) sign[(x/4)%4]
#define L3(x) sign[(x/16)%4]
#define M1 "[(%.0lf%c%.0lf)%c%.0lf]%c%.0lf \n"
#define M2 "[%.0lf%c(%.0lf%c%.0lf)]%c%.0lf \n"
#define M3 "%.0lf%c[(%.0lf%c%.0lf)%c%.0lf] \n"
#define M4 "%.0lf%c[%.0lf%c(%.0lf%c%.0lf)] \n"
#define M5 "(%.0lf%c%.0lf)%c(%.0lf%c%.0lf) \n"
#define M6 "(%.0lf%c%.0lf%c%.0lf)%c%.0lf \n"
#define M7 "(%.0lf%c%.0lf)%c%.0lf%c%.0lf \n"
#define M8 "%.0lf%c(%.0lf%c%.0lf%c%.0lf) \n"
#define M9 "%.0lf%c%.0lf%c(%.0lf%c%.0lf) \n"
#define M0 "%.0lf%c(%.0lf%c%.0lf)%c%.0lf \n"
#define N "%.0lf%c%.0lf%c%.0lf%c%.0lf \n"
#define O *p,L1(i),*(p+1),L2(i),*(p+2),L3(i),*(p+3)
int input()
{ int i,k;
i=k=0;
do{
while(i!=110&&i!=121) i=getch();
if(i!=0&&k==0)putchar(i-32);
k=getch();
if(k==8){putchar(8);putchar(0);putchar(8);i=k=0;}
}while(k!='\r');
putchar(10);
return(i);
}
double fun(double a1,double a2,char mode)
{
switch(mode){
case '+': return a1+a2;break;
case '-': return a1-a2;break;
case '*': return a1*a2;break;
case '/': return (a2>0.0001)?a1/a2:10000;break;
}
}
void change(double *p,int mode)
{
double *p1,*p2,temp;
if(mode%6){
mode%=3;
switch(mode)
{
case 0: p1=p+2;p2=p+3;break;
case 1: p1=p+1;p2=p+2;break;
case 2: p1=p+1;p2=p+3;break;
}
}
else{
mode/=6;
p1=p;p2=p+mode;
}
temp=*p1;*p1=*p2;*p2=temp;
}
void loop(double *p)
{ double temp1,temp2,temp3;
char sign[5] = "+-*/";
int i=0,a;
do{ a=0;
temp1=fun(*p,*(p+1),L1(i));
temp2=fun(temp1,*(p+2),L2(i));
temp3=fun(temp2,*(p+3),L3(i));
if(ceil(temp3)==24) a+=1;
temp1=fun(*(p+1),*(p+2),L2(i));
temp2=fun(*p,temp1,L1(i));
temp3=fun(temp2,*(p+3),L3(i));
if(ceil(temp3)==24) a+=2;
temp2=fun(temp1,*(p+3),L3(i));
temp3=fun(*p,temp2,L1(i));
if(ceil(temp3)==24) a+=4;
temp1=fun(*(p+2),*(p+3),L3(i));
temp2=fun(*(p+1),temp1,L2(i));
temp3=fun(*p,temp2,L1(i));
if(ceil(temp3)==24) a+=8;
temp2=fun(*p,*(p+1),L1(i));
temp3=fun(temp2,temp1,L2(i));
if(ceil(temp3)==24) a+=16;
switch (a){
case 0:break;
case 1: printf(M1,O);break;
case 2: printf(M2,O);break;
case 3: printf(M6,O);break;
case 4: printf(M3,O);break;
case 6: printf(M0,O);break;
case 8: printf(M4,O);break;
case 12: printf(M8,O);break;
case 16: printf(M5,O);break;
case 17: printf(M7,O);break;
case 24: printf(M9,O);break;
default :printf(N,O);break;
}
}while(64-i++);
}
main()
{
double man[4];
int yn,k;
do{
printf("Please input 4 number:");
for(k=0;k<4;k++) scanf("%lf",&man[k]);
k=0;
while(24-k){
change(man,k++);
loop(man);
}
printf("Do you want to try it again? Y or N [ ]\b\b");
fflush(stdin);
yn=input();
if(yn=='n') break;
}while(1);
}
#include "math.h"
#define L1(x) sign[x%4]
#define L2(x) sign[(x/4)%4]
#define L3(x) sign[(x/16)%4]
#define M1 "[(%.0lf%c%.0lf)%c%.0lf]%c%.0lf \n"
#define M2 "[%.0lf%c(%.0lf%c%.0lf)]%c%.0lf \n"
#define M3 "%.0lf%c[(%.0lf%c%.0lf)%c%.0lf] \n"
#define M4 "%.0lf%c[%.0lf%c(%.0lf%c%.0lf)] \n"
#define M5 "(%.0lf%c%.0lf)%c(%.0lf%c%.0lf) \n"
#define M6 "(%.0lf%c%.0lf%c%.0lf)%c%.0lf \n"
#define M7 "(%.0lf%c%.0lf)%c%.0lf%c%.0lf \n"
#define M8 "%.0lf%c(%.0lf%c%.0lf%c%.0lf) \n"
#define M9 "%.0lf%c%.0lf%c(%.0lf%c%.0lf) \n"
#define M0 "%.0lf%c(%.0lf%c%.0lf)%c%.0lf \n"
#define N "%.0lf%c%.0lf%c%.0lf%c%.0lf \n"
#define O *p,L1(i),*(p+1),L2(i),*(p+2),L3(i),*(p+3)
int input()
{ int i,k;
i=k=0;
do{
while(i!=110&&i!=121) i=getch();
if(i!=0&&k==0)putchar(i-32);
k=getch();
if(k==8){putchar(8);putchar(0);putchar(8);i=k=0;}
}while(k!='\r');
putchar(10);
return(i);
}
double fun(double a1,double a2,char mode)
{
switch(mode){
case '+': return a1+a2;break;
case '-': return a1-a2;break;
case '*': return a1*a2;break;
case '/': return (a2>0.0001)?a1/a2:10000;break;
}
}
void change(double *p,int mode)
{
double *p1,*p2,temp;
if(mode%6){
mode%=3;
switch(mode)
{
case 0: p1=p+2;p2=p+3;break;
case 1: p1=p+1;p2=p+2;break;
case 2: p1=p+1;p2=p+3;break;
}
}
else{
mode/=6;
p1=p;p2=p+mode;
}
temp=*p1;*p1=*p2;*p2=temp;
}
void loop(double *p)
{ double temp1,temp2,temp3;
char sign[5] = "+-*/";
int i=0,a;
do{ a=0;
temp1=fun(*p,*(p+1),L1(i));
temp2=fun(temp1,*(p+2),L2(i));
temp3=fun(temp2,*(p+3),L3(i));
if(ceil(temp3)==24) a+=1;
temp1=fun(*(p+1),*(p+2),L2(i));
temp2=fun(*p,temp1,L1(i));
temp3=fun(temp2,*(p+3),L3(i));
if(ceil(temp3)==24) a+=2;
temp2=fun(temp1,*(p+3),L3(i));
temp3=fun(*p,temp2,L1(i));
if(ceil(temp3)==24) a+=4;
temp1=fun(*(p+2),*(p+3),L3(i));
temp2=fun(*(p+1),temp1,L2(i));
temp3=fun(*p,temp2,L1(i));
if(ceil(temp3)==24) a+=8;
temp2=fun(*p,*(p+1),L1(i));
temp3=fun(temp2,temp1,L2(i));
if(ceil(temp3)==24) a+=16;
switch (a){
case 0:break;
case 1: printf(M1,O);break;
case 2: printf(M2,O);break;
case 3: printf(M6,O);break;
case 4: printf(M3,O);break;
case 6: printf(M0,O);break;
case 8: printf(M4,O);break;
case 12: printf(M8,O);break;
case 16: printf(M5,O);break;
case 17: printf(M7,O);break;
case 24: printf(M9,O);break;
default :printf(N,O);break;
}
}while(64-i++);
}
main()
{
double man[4];
int yn,k;
do{
printf("Please input 4 number:");
for(k=0;k<4;k++) scanf("%lf",&man[k]);
k=0;
while(24-k){
change(man,k++);
loop(man);
}
printf("Do you want to try it again? Y or N [ ]\b\b");
fflush(stdin);
yn=input();
if(yn=='n') break;
}while(1);
}