- #include <iostream>
- #include <cmath>
- using namespace std;
- const double epsilon=0.0001;
- bool equals(double lhs, double rhs)
- {
- return fabs(lhs-rhs)<epsilon?true:false;
- }
- char op[]="+-*/";
- double binop(double a,double b,char c)
- {
- switch(c)
- {
- case '+':
- return a+b;
- case '-':
- return a-b;
- case '*':
- return a*b;
- case '/':
- return a/b;
- }
- }
- void foobar(int a,int b,int c,int d)
- {
- for(int p=0;p<=4;++p)
- {
- for(int i=0;i<4;++i)
- {
- for(int j=0;j<4;++j)
- {
- for(int k=0;k<4;++k)
- {
- double result;
- switch(p)
- {
- case 0:
- result=binop(binop(binop(a,b,op[i]),c,op[j]),d,op[k]);
- if(equals(24,result))
- {
- printf("((%d %c %d) %c %d) %c %d\\n",
- a,op[i],b,op[j],c,op[k],d);
- }
- break;
- case 1:
- result=binop(binop(a,binop(b,c,op[i]),op[j]),d,op[k]);
- if(equals(24,result))
- {
- printf("(%d %c (%d %c %d)) %c %d\\n",
- a,op[j],b,op[i],c,op[k],d);
- }
- break;
- case 2:
- result=binop(binop(a,b,op[i]),binop(c,d,op[j]),op[k]);
- if(equals(24,result))
- {
- printf("(%d %c %d) %c (%d %c %d)\\n",
- a,op[i],b,op[k],c,op[j],d);
- }
- break;
- case 3:
- result=binop(a,binop(binop(b,c,op[i]),d,op[j]),op[k]);
- if(equals(24,result))
- {
- printf("%d %c ((%d %c %d) %c %d)\\n",
- a,op[k],b,op[i],c,op[j],d);
- }
- break;
- case 4:
- result=binop(a,binop(b,binop(c,d,op[i]),op[j]),op[k]);
- if(equals(24,result))
- {
- printf("%d %c (%d %c (%d %c %d))\\n",
- a,op[k],b,op[j],c,op[i],d);
- }
- break;
- }
- }
- }
- }
- }
- }
- int main ()
- {
- foobar(8,10,7,8);
- foobar(4,7,7,7);
- foobar(4,7,7,8);
- foobar(1,5,5,5);
- foobar(5,1,5,5);
- foobar(5,5,1,5);
- foobar(5,5,5,1);
- foobar(8,3,8,3);
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/261120137479.html
来源: http://www.codesnippet.cn/detail/261120137479.html