经典指数          
原因
2116
浏览数
0
收藏数
 

Redraiment小时候最喜欢和姐姐玩算24的游戏:随机抽出4张扑克牌摆好(A=1、J=11、Q=12、K=13),在四个数中间分别填入“+”、“-”、“*”、“/”四则运算符,如果计算结果正好是24即为正确解! 需要考虑运算符优先级,即先算乘除再算加减;但不能使用括号提高优先级;也不能不填运算符。 为了获胜,他拜托你写一个程序快速地求出所有能得到24的解。 输入描述: 输入包含多组数据。 每组数据包含4个整数,每个整数的范围都是[1, 10]。 输出描述: 对应每组输入,按照字典顺序输出所有能得到24的解,每个解单独输出一行。 如果某一组输入没有任何解,就输出一行“None”。 每一组数据之后都输出一个空行作为分隔。 输入例子: 1 2 3 4 5 5 5 5 13 12 11 10 输出例子: 1*2*3*4 None 13+12-11+10

     举报   纠错  
 
切换
1 个答案
#include #include #include using namespace std; char op[]="+-*/"; int m,n,p,r; float a,b,c,d; int prior[128]; float a_op_b(float a,char ch,float b){     float result;     switch(ch){         case '+' :result=a+b;break;         case '-' :result=a-b;break;         case '*' :result=a*b;break;         case '/':result=a/b;break;     }     return result; } void print_it(){     printf("%.0f%c%.0f%c%.0f%c%.0f\n",            a,op[m],b,op[n],c,op[p],d);     return ; }//print_it float calculate(){//key     float sum=0;     if(prior[op[n]]>prior[op[m]]){         sum=a_op_b(b,op[n],c);         if(prior[op[p]]>prior[op[m]])         {             sum=a_op_b(sum,op[p],d);             sum=a_op_b(sum,op[m],a);         }         else{             sum=a_op_b(a,op[m],sum);             sum=a_op_b(sum,op[p],d);         }     }     else{         sum=a_op_b(a,op[m],b);         if(prior[op[p]]>prior[op[n]]){             sum=a_op_b(sum,op[n],a_op_b(c,op[p],d));         }         else{             sum=a_op_b(sum,op[n],c);             sum=a_op_b(sum,op[p],d);         }     }     return sum; }//calculate bool process(){     bool flag=true;     float targit=24;     for(m=0;m<4;m++){         for(n=0;n<4;n++){             for(p=0;p<4;p++){                 if(calculate()==targit){                     flag=false;                     print_it();                 }             }//3for         }//2for     }//1for     return flag; } int main(){     prior['-']=prior['+']=1;     prior['*']=prior['/']=2;     bool flag=true;     while(cin>>a>>b>>c>>d){         flag=process();         if(flag==true)             printf("None\n");     }//while     return 0; }
 
切换
撰写答案