📄 24points.c
字号:
#include <stdio.h>
#define forT for(t2=t1;t2<3;t2++)t[t2]=t[t2+1];
#define GetNum(n) {if(t1>0 && t[t1-1]==t[t1])continue;n=t[t1];forT}
#define isTrue if(23.9999<total && total<24.0001)
#define argment n1,GetSym(sym1),n2,GetSym(sym2),n3,GetSym(sym3),n4
#define pt(str) printf(str,argment);SearchCount++;continue;
#define fsym(s) for(long s=0;s<4;s++)
#define isSct(s1,s2) if(!(s1==1 && s2<=1 || s1==3 && s2>=2))
#define tct total=count
char GetSym(long symbol)
{
switch(symbol)
{
case 0: return '+';
case 1: return '-';
case 2: return '*';
default: return '/';
}
}
double count(double num1,double num2,long symbol)
{
switch(symbol)
{
case 0: if(num1>=num2)return num1+num2;else return -1e10;
case 1: if(num2!=0)return num1-num2;else return -1e10;
case 2: if(num1>=num2)return num1*num2;else return -1e10;
default:if((num2<-0.0001 || 0.0001<num2)&& num2!=1)
return num1/num2;else return -1e10;
}
}
int main(int argc, char* argv[])
{//雨中飞燕之作
long m[4],SearchCount=0,n1,n2,n3,n4;
printf("Input 4 Numbers(a,b,c,d):\n");
scanf("%d,%d,%d,%d",&m[0],&m[1],&m[2],&m[3]);
for(n2=0;n2<3;n2++)for(n1=3;n1>=n2;n1--)
if(m[n1]>m[n1+1])n3=m[n1+1],m[n1+1]=m[n1],m[n1]=n3;
for(long z1=0;z1<24;z1++)
{
long z2=z1 % 6,t1=z1/6,t2,t[4]={m[0],m[1],m[2],m[3]};
GetNum(n1)t1=z2/2;z2%=2;GetNum(n2)t1=z2;GetNum(n3)n4=t[0];
fsym(sym1)fsym(sym2)fsym(sym3)
{
double total,total2=count(n3,n4,sym3);
tct(n1,n2,sym1);tct(total,n3,sym2);tct(total,n4,sym3);
isTrue{pt("((%d%c%d)%c%d)%c%d\n")}
tct(n2,n3,sym2);tct(n1,total,sym1);tct(total,n4,sym3);
isSct(sym1,sym2)isTrue{pt("(%d%c(%d%c%d))%c%d\n")}
tct(n2,n3,sym2);tct(total,n4,sym3);tct(n1,total,sym1);
isSct(sym3,sym2)isTrue{pt("%d%c((%d%c%d)%c%d)\n")}
tct(n3,n4,sym3);tct(n2,total,sym2);tct(n1,total,sym1);
isSct(sym1,sym2)isSct(sym3,sym2)
isTrue{pt("%d%c(%d%c(%d%c%d))\n")}
tct(n1,n2,sym1);tct(total,total2,sym2);
isTrue{pt("(%d%c%d)%c(%d%c%d)\n")}
}
}
printf("Total=%d\t",SearchCount);return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -