POJ-3983-快算24(简单模拟)

来源:互联网 发布:淘宝网买家中心 编辑:程序博客网 时间:2024/06/05 16:24
//传送门:http://poj.org/problem?id=3983#include <queue>#include <functional>#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <stack>#include <vector>#include <set>#include <map>#include <string>#include <cmath>#include <cstdlib>#include <ctime>#include <assert.h>using namespace std;#define N 100005char ch[5]={'+','-','*','/'};float f(float a,float b,int c)   // c与 ch 数组对应{   switch(c){   case 0: return a+b;break;        case 1: return a-b;break;   case 2: return a*b;break;   case 3: if(b==0) return 0x3f3f3f3f*1.; // /0 不特别考虑也能过            else     return a/b;           break;   }}bool test(int i,int j,int k,float a,float b,float c,float d){  /* if(i==2 && j==1 && k==3){   cout<<f( f( f(a,b,i), c, j), d, k)<<endl;   cout<<f( f(a,b,i), f(c, d, j), k)<<endl;   cout<<f( f(a,f(b, c, j), i),d, k)<<endl;   cout<<f(a, f( f(b, c, j), d, k), i)<<endl;   cout<<f(a, f(b, f(c, d, k), j), i)<<endl;   }*/   // 一共有5种运算顺序   if( (int)f( f( f(a,b,i), c, j), d, k) ==24){      printf("((%.0f%c%.0f)%c%.0f)%c%.0f",a,ch[i],b,ch[j],c,ch[k],d);      return 1;   }   if( (int)f( f(a,b,i), f(c, d, j), k) ==24){      printf("(%.0f%c%.0f)%c(%.0f%c%.0f)",a,ch[i],b,ch[j],c,ch[k],d);      return 1;   }   if( (int)f( f(a,f(b, c, j), i),d, k) ==24){      printf("(%.0f%c(%.0f%c%.0f))%c%.0f",a,ch[i],b,ch[j],c,ch[k],d);      return 1;   }   if( (int)f(a, f( f(b, c, j), d, k), i) ==24){      printf("%.0f%c((%.0f%c%.0f)%c%.0f)",a,ch[i],b,ch[j],c,ch[k],d);      return 1;   }   if( (int)f(a, f(b, f(c, d, k), j), i) ==24){      printf("%.0f%c(%.0f%c(%.0f%c%.0f))",a,ch[i],b,ch[j],c,ch[k],d);      return 1;   }   return 0;}int main(){   float a,b,c,d;   scanf("%f%f%f%f",&a,&b,&c,&d); //4个数之间填3个操作符 , 枚举   for(int i=0;i<4;i++){      for(int j=0;j<4;j++){         for(int k=0;k<4;k++){            if(test(i,j,k,a,b,c,d)) return 0;  //找到一个答案就返回         }      }   }}

1 0
原创粉丝点击