求助一下这段代码怎么判重
查看原帖
求助一下这段代码怎么判重
494992
underline__jian楼主2022/10/1 20:48
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#define re register

using namespace std;
map<string,int> q;
char o[5]="+-*/";
int tot;
bool flag;
inline double myabs(double x){
	return x>0?x:-x;
}
inline bool check(double x){
	return myabs(x-24)<0.000001;
}
inline double add(double a, double b){
	return a+b;
}
inline double sub(double a, double b){
	return a-b;
}
inline double mul(double a, double b){
	return a*b;
}
inline double div(double a, double b){
	if(!b) return -1;
	return a/b;
} 
double(*op[4])(double,double)={
	add,sub,mul,div
};
inline void Calculation(double a,double b,double c,double d){
    for(re int i=0;i<4;i++)
        for(re int j=0;j<4;j++)
            for(re int k=0;k<4;k++){
                double ret=op[k](op[j](op[i](a,b),c),d);
                if(check(ret)) tot++;
                ret=op[k](op[i](a,op[j](b,c)),d);
                if(check(ret)) tot++;
                ret=op[i](a,op[k](op[j](b,c),d));
                if(check(ret)) tot++;
                ret=op[j](op[i](a,b),op[k](c,d));
                if(check(ret)) tot++;
                ret=op[i](a,op[j](b,op[k](c,d)));
                if(check(ret)) tot++;
            }
}
double a[5];
int main(){
    for(re int i=1;i<=4;i++) scanf("%lf",&a[i]);
    bool s=false;
    for(re int i=1;i<=4;i++){
		for(re int j=1;j<=4;j++){
			if(i==j) continue;
			for(re int k=1;k<=4;k++){
    			if(i==k||i==10-i-j-k||j==k||j==10-j-k-i||k==10-j-i-k) continue;
    			string a1,b1,c1,d1,f1;
    			a1=char(a[i]+'0');
				b1=char(a[j]+'0');
				c1=char(a[k]+'0');
				d1=char(a[10-i-j-k]+'0');
    			f1=a1+' '+b1+' '+c1+' '+d1;
    			if(q[f1]) continue;
    			q[f1]=1;
    			Calculation(a[i],a[j],a[k],a[10-i-j-k]);
			}
		}
	}
	printf("%d",tot);
	return 0;
}
2022/10/1 20:48
加载中...