【百炼oj】2787:算24

原创 2018年04月15日 09:03:13

描述给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。

这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。

比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。
输入输入数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。最后一组测试数据中包括4个0,表示输入的结束,这组数据不用处理。输出对于每一组测试数据,输出一行,如果可以得到24,输出“YES”;否则,输出“NO”。样例输入
5 5 5 1
1 1 4 2
0 0 0 0
样例输出
YES
NO

/*24点*/
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#define MIN 0.000001
using namespace std;
double num[4];
int mark;
double operate(double a,double b,int k){
    double result=0;
    switch(k){
    case 0:result=a+b;break;
    case 1:result=a-b;break;
    case 2:result=a*b;break;
    case 3:if(b!=0)result=a/b;break;
    case 4:result=b-a;break;
    case 5:if(a!=0)result=b/a;
    }
    return result;
}

int func(int i,int j,int k){
    if(fabs(operate(operate(operate(num[0],num[1],i),num[2],j),num[3],k)-24.0)<=MIN)return 1;
    if(fabs(operate(operate(num[0],num[1],i),operate(num[2],num[3],j),k)-24.0)<=MIN)return 1;
    return 0;
}

void check(double*num){
     int i,j,k;
     for(i=0;i<6;i++){
        for(j=0;j<6;j++){
            for(k=0;k<6;k++){
                if(func(i,j,k)){
                    mark=1;
                    return;
                }
            }
        }
     }
}

int main(){
    while(1){
        int i;
        mark=0;
        for(i=0;i<4;i++)scanf("%lf",&num[i]);
            if(num[0]==0)break;
            sort(num,num+4);
            check(num);
            while(next_permutation(num,num+4)){
                check(num);
            }
            if(mark==1)printf("YES\n");
            else printf("NO\n");
    }
    return 0;
}

百炼OJ1005

描述 Fred Mapper is considering purchasing some land in Louisiana to build his house on. In the proce...
  • u014079441
  • u014079441
  • 2016年01月15日 14:34
  • 241

百炼OJ1007

描述 现在有一些长度相等的DNA串(只由ACGT四个字母组成),请将它们按照逆序对的数量多少排序。 逆序对指的是字符串A中的两个字符A[i]、A[j],具有i A[j] 的性质。如字符串”ATC...
  • u014079441
  • u014079441
  • 2016年01月15日 14:50
  • 585

OJ百练1001

#include #include #include using namespace std; string strMultiplies(const string& str1, const s...
  • a363344923
  • a363344923
  • 2014年12月07日 15:42
  • 747

百炼OJ:2801:填词

Alex喜欢填词游戏。填词是游戏是一个非常简单的游戏。填词游戏包括一个N * M大小的矩形方格盘和P个单词。玩家需要把每个方格中填上一个字母使得每个单词都能在方格盘上找到...
  • Kangyucheng
  • Kangyucheng
  • 2017年07月18日 21:30
  • 221

POJ 百炼 保研机试 2750:鸡兔同笼

2750:鸡兔同笼 查看提交统计提示提问 总时间限制: 1000ms 内存限制: 65536kB 描述一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外...
  • u013240812
  • u013240812
  • 2015年11月10日 14:52
  • 513

北大OJ_1007题:DNA Sorting

该题的意思是输入指定数量的字符串,每个字符串的长度一样,找出每个字符串中逆序对,然后按逆序对的升序输出所以的字符串,逆序对相同的则按输入时的顺序输出。 此题的突破点在找逆序对,以下列举两种找出逆序对的...
  • s634772208
  • s634772208
  • 2015年06月20日 00:20
  • 1071

DSOJ BST(二叉搜索树)

题目链接 #include //Binary Search Tree #include typedef struct node { int data; struct node *left, ...
  • xhf0374
  • xhf0374
  • 2015年12月19日 22:58
  • 239

百练OJ:2701:与7无关的数

题目链接:描述一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数.现求所有小于等于n(n &lt; 100)的与7无关的正整数的平方和.输入输入为一行...
  • Kangyucheng
  • Kangyucheng
  • 2018年02月27日 13:25
  • 58

百练OJ:2964:日历问题

百练OJ:2964:日历问题
  • Kangyucheng
  • Kangyucheng
  • 2017年08月14日 12:05
  • 505

百炼OJ1009

描述 IONU Satellite Imaging, Inc. records and stores very large images using run length encoding. You...
  • u014079441
  • u014079441
  • 2016年01月19日 11:38
  • 488
收藏助手
不良信息举报
您举报文章:【百炼oj】2787:算24
举报原因:
原因补充:

(最多只允许输入30个字)