zoukankan      html  css  js  c++  java
  • HNU 12886 Cracking the Safe(暴力枚举)

    题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12886&courseid=274

    解题报告:输入4个数,要你判断用 + 、- 、 * 、/、四种运算能不能得到一个结果为24的式子,可以用括号。

    解释一下测试的第四组样例:应该是6 / (1 - 3 / 4)

    暴力枚举三种符号分别是什么,然后枚举这三种符号运算的顺序,然后枚举这四个数字的24种排列方式,时间是4^3 * 6 * 24

    然后注意要用double型,判断是否等于24的时候要这样fabs(ans - 24.0) <= 0.000000001

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<map>
     6 #include<string>
     7 #include<cmath>
     8 using namespace std;
     9 int fu[4];
    10 int mei[50][5] = {
    11 {1 ,2 ,3 ,4},
    12 {1 ,2 ,4 ,3},
    13 {1 ,3 ,2 ,4},
    14 {1 ,3 ,4 ,2},
    15 {1 ,4 ,2 ,3},
    16 {1 ,4 ,3 ,2},
    17 {2 ,1 ,3 ,4},
    18 {2 ,1 ,4 ,3},
    19 {2 ,3 ,1 ,4},
    20 {2 ,3 ,4 ,1},
    21 {2 ,4 ,1 ,3},
    22 {2 ,4 ,3 ,1},
    23 {3 ,1 ,2 ,4},
    24 {3 ,1 ,4 ,2},
    25 {3 ,2 ,1 ,4},
    26 {3 ,2 ,4 ,1},
    27 {3 ,4 ,1 ,2},
    28 {3 ,4 ,2 ,1},
    29 {4 ,1 ,2 ,3},
    30 {4 ,1 ,3 ,2},
    31 {4 ,2 ,1 ,3},
    32 {4 ,2 ,3 ,1},
    33 {4 ,3 ,1 ,2},
    34 {4 ,3 ,2 ,1},
    35 };
    36 double CC(int f,double a,double b)
    37 {
    38     if(f == 4 && b == 0) return 0;
    39     if(f == 1) return a + b;
    40     if(f == 2) return a - b;
    41     if(f == 3) return a * b;
    42     if(f == 4) return a / b;
    43 }
    44 double calc(int l,double a,double b,double c,double d)
    45 {
    46 //    double a = num[1],b = num[2],c = num[3],d = num[4];
    47     if(l == 1)
    48     return CC(fu[3],CC(fu[2],CC(fu[1],a,b),c),d);
    49     if(l == 2)
    50     return CC(fu[2],CC(fu[1],a,b),CC(fu[3],c,d));
    51     if(l == 3)
    52     return CC(fu[3],CC(fu[1],a,CC(fu[2],b,c)),d);
    53     if(l == 4)
    54     return CC(fu[1],a,CC(fu[3],CC(fu[2],b,c),d));
    55     if(l == 5)
    56     return CC(fu[2],CC(fu[1],a,b),CC(fu[3],c,d));
    57     if(l == 6)
    58     return CC(fu[1],a,CC(fu[2],b,CC(fu[3],c,d)));
    59 }
    60 int main()
    61 {
    62     
    63     int T;
    64     scanf("%d",&T);
    65     while(T--)
    66     {
    67         double num[5];
    68         scanf("%lf%lf%lf%lf",&num[1],&num[2],&num[3],&num[4]);
    69         int flag = 1;
    70         for(int i = 1;flag && i <= 4;++i)
    71         for(int j = 1;flag && j <= 4;++j)
    72         for(int k = 1;flag && k <= 4;++k)
    73         {
    74             fu[1] = i;
    75             fu[2] = j;
    76             fu[3] = k;
    77             for(int m = 0;flag && m < 24;++m)
    78             {
    79                 for(int l = 1;flag && l <= 6;++l)
    80                 {
    81                     double ans = calc(l,num[mei[m][0]],num[mei[m][1]],num[mei[m][2]],num[mei[m][3]]);
    82                     if(fabs(ans-24.0) <= 0.00000001)
    83                     {
    84                         flag = 0;
    85                         break;
    86                     }
    87                 }
    88             }
    89         }
    90         printf(flag? "NO
    ":"YES
    ");
    91     }
    92     return 0;
    93 }
    View Code
  • 相关阅读:
    jquery
    gulp 入门
    bower 教程
    webstrom管理git
    修改页面浏览器自动刷新
    兼容IE低版本
    js之触屏事件篇
    js之日期篇
    设置浏览器默认样式
    Listview四种视图VIEW
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3903416.html
Copyright © 2011-2022 走看看