Description
给定4个不大于10的正整数(范围1-10),要求在不改变数据先后顺序的情况下,采用加减乘除四种运算,找到一个表达式,使得最后的结果是24。Input
4个不大于10的正整数。输入数据保证存在唯一解。Output
不改变位置顺序,由'+','-','*','/'4个运算符和'(',')'组成的表达式Sample Input
5 5 1 5Sample Output
5*(5-(1/5))Source
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
数据范围不大,直接暴力搜索就可以了~
(***)
#include<cstdio> #include<cstring> double a,b,c,d; char ope[4] = {'+','-','*','/'}; double calc( double a, int vk, double b) { switch(ope[vk]) { case '+':return a+b;break; case '-':return a-b;break; case '*':return a*b;break; case '/':return a/b;break; } } int cal(int i,int j,int k,double a,double b,double c,double d) { if(calc(calc(a,i,b),j,calc(c,k,d))-24.0==0) { printf("(%.0lf%c%.0lf)%c(%.0lf%c%.0lf)\n",a,ope[i],b,ope[j],c,ope[k],d); return 1; } if (calc(calc(calc(a,i,b),j,c),k,d)-24.0==0) { printf("((%.0lf%c%.0lf)%c%.0lf)%c%.0lf)\n",a,ope[i],b,ope[j],c,ope[k],d); return 1; } if(calc(calc(a,i,calc(b,j,c)),k,d)-24.0==0) { printf("(%.0lf%c(%.0lf%c%.0lf))%c%.0lf)\n",a,ope[i],b,ope[j],c,ope[k],d); return 1; } if(calc(a,i,calc(calc(b,j,c),k,d))-24.0==0) { printf("%.0lf%c((%.0lf%c%.0lf)%c%.0lf)\n",a,ope[i],b,ope[j],c,ope[k],d); return 1; } if(calc(a,i,calc(b,j,calc(c,k,d)))==24.0) { printf("%.0lf%c(%.0lf%c(%.0lf%c%.0lf))\n",a,ope[i],b,ope[j],c,ope[k],d); return 1; } return 0; } int main() { while(scanf("%lf%lf%lf%lf",&a,&b,&c,&d)!=EOF) { int z=0; for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { for(int k=0;k<4;k++) { if(cal(i,j,k,a,b,c,d)) { z=1;break; } } if(z) break; } if(z) break; } } return 0; }
