zoukankan      html  css  js  c++  java
  • 【Openjudge】 算24

    原题戳这里

    简单的搜索,深搜轻松A掉,但是出现了许许多多奇奇怪怪恶恶心心的错误

    直接简单的模拟,对于a,b两个数,有a+b, a-b, a*b,  a/b, b-a, b/a 四种运算

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <cmath> 
      5 #define p 0.00000001
      6 using namespace std;
      7 double a[5],tot;
      8 bool flag[5],t;
      9 void dfs(int k)
     10 {
     11     if(k==4)
     12     {
     13         for(int y=1;y<=4;y++)    
     14             if(fabs(a[y]-24.0)<=p&&!flag[y])
     15                 t=1;           //一个小小的flag变量
     16         return ;
     17     }
     18     for(int i=1;i<=4;i++)           //任意选出两个数进行加减乘除运算
     19         for(int j=i+1;j<=4;j++)
     20             if(!flag[i]&&!flag[j])
     21             {
     22                 //+
     23                 {
     24                     double f=a[i];
     25                     a[i]=a[i]+a[j];
     26                     tot=a[i];
     27                     flag[j]=true;
     28                     dfs(k+1);
     29                     a[i]=f;
     30                     flag[j]=false;
     31                 }
     32                 //*
     33                 {
     34                     double f=a[i];
     35                     a[i]=a[i]*a[j];
     36                     tot=a[i];
     37                     flag[j]=true;
     38                     dfs(k+1);
     39                     a[i]=f;
     40                     flag[j]=false;
     41                 }
     42                 //-
     43                 {
     44                     double f=a[i];
     45                     a[i]=a[i]-a[j];
     46                     tot=a[i];
     47                     flag[j]=true;
     48                     dfs(k+1);
     49                     a[i]=f;
     50                     flag[j]=false;
     51                 }
     52                 //÷ 
     53                 {
     54                     double f=a[i];
     55                     a[i]=a[i]/a[j];
     56                     tot=a[i];
     57                     flag[j]=true;
     58                     dfs(k+1);
     59                     a[i]=f;
     60                     flag[j]=false;
     61                 }
     62                 //-             ← 倒着减
     63                 {
     64                     double f=a[i];
     65                     a[i]=a[j]-a[i];
     66                     tot=a[i];
     67                     flag[j]=true;
     68                     dfs(k+1);
     69                     a[i]=f;
     70                     flag[j]=false;
     71                 }
     72                 //÷             ←倒着除
     73                 {
     74                     double f=a[i];
     75                     a[i]=a[j]/a[i];
     76                     tot=a[i];
     77                     flag[j]=true;
     78                     dfs(k+1);
     79                     a[i]=f;
     80                     flag[j]=false;
     81                 }
     82             }
     83         return ;
     84 }
     85 int main()
     86 {
     87     while(1)
     88     {
     89         memset(flag,0,sizeof(flag));
     90         cin>>a[1]>>a[2]>>a[3]>>a[4];
     91         if(!a[1]&&!a[2]&&!a[3]&&!a[4])
     92             return 0;
     93         dfs(1);
     94         if(!t)
     95             cout<<"NO"<<endl;
     96         else    cout<<"YES"<<endl;      //防止递归中循环输出YES
     97         t=0;
     98     }
     99     return 0;
    100 }

    很简单啊哈哈哈哈哈哈

  • 相关阅读:
    C# 6.0:在catch和finally中使用await
    C# 6.0:Expression – Bodied Methods
    C# 6.0:Auto-Property initializer
    C# 6.0:String Interpolation
    【转】http://www.cnblogs.com/yuzukwok/p/3884377.html
    ThoughtWorks面试题(标记给自己看)
    C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
    (转)C#编程中的66个好习惯
    (转)解决WINDOWS 程序界面闪烁问题的一些经验
    C#利用反射动态绑定事件
  • 原文地址:https://www.cnblogs.com/oiersyp/p/6370155.html
Copyright © 2011-2022 走看看