• 速算24点


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1427

    思路:

    这道题的难点在于你先进行哪几个数的运算。而不是简单的先处理第一个,再处理第二个,再处理第三个,最后处理第四个。

    具体的还是看代码的实现吧:

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 int res[4];
     5 void dfs(int sum, int cur, int temp);
     6 bool flag = 0;
     7 int main()
     8 {
     9     char s[3];
    10     int i,j,k;
    11     while(1)
    12     {
    13         for(i = 0;i < 4;i ++)
    14         {
    15             if(scanf("%s",s) == EOF) return 0;
    16             if(s[0] == 'A') res[i] = 1;
    17             else if(s[0] == 'J') res[i] = 11;
    18             else if(s[0] == 'Q') res[i] = 12;
    19             else if(s[0] == 'K') res[i] = 13;
    20             else if(s[0] == '1' && s[1] == '0') res[i] = 10;
    21             else res[i] = s[0] - '0';
    22         }
    23         sort(res, res+4);
    24         flag = 0;
    25         do
    26         {
    27             dfs(res[0], 1, res[1]);
    28         }while(next_permutation(res, res+4)&&!flag);
    29         if(flag) printf("Yes
    ");
    30         else printf("No
    ");
    31     }
    32     return 0;
    33 }
    34 void dfs(int sum, int cur, int temp) // sum 代表前一个括号内的值,temp代表后一个括号内的值,cur起到计数的作用
    35 {
    36     if(flag)
    37         return;
    38     if(cur==3)
    39     {
    40         if(sum+temp==24)
    41             flag=1;
    42         if(sum-temp==24)
    43             flag=1;
    44         if(sum*temp==24)
    45             flag=1;
    46         if(temp!=0&&sum%temp==0&&sum/temp==24)
    47             flag=1;
    48         return;
    49     }
    50     dfs(sum+temp, cur+1, res[cur+1]);
    51     dfs(sum-temp, cur+1, res[cur+1]);
    52     dfs(sum*temp, cur+1, res[cur+1]);
    53     if(temp!=0&&sum%temp==0)
    54         dfs(sum/temp, cur+1, res[cur+1]);
    55     // 这里就是因为括号改变运算的顺序!
    56     dfs(sum, cur+1, temp+res[cur+1]);
    57     dfs(sum, cur+1, temp-res[cur+1]);
    58     dfs(sum, cur+1, temp*res[cur+1]);
    59     if(res[cur+1]!=0&&temp%res[cur+1]==0)
    60         dfs(sum, cur+1, temp/res[cur+1]);
    61 }
  • 相关阅读:
    js的深拷贝特别注意this的深拷贝
    快速的熟悉一个angular的项目从run看起
    关于angular路由中的#
    AngularJS的Provider, Value, Constant, Service, Factory, Decorator的区别与详解
    css页面缩放
    jquery自定义window事件
    js自定义事件
    git分支
    webpack知识小结--require.context方法
    Vue 创建组件的两种方法
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/11186524.html
Copyright © 2020-2023  润新知