⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24points.c

📁 本程序并不能去掉全部冗余解
💻 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 + -