24点游戏

24点游戏,第1张

问题 B: 24点游戏

内存限制:128 MB 时间限制:1.000 S 标准输入输出

题目类型:传统 评测方式:文本比较 上传者:liuyong

提交:2551 通过:1009

题目描述

给出4个正整数 *** 作数,你的任务是使用运算符(+,-,*,/)和括号对 *** 作数进行计算,分析是否能得到24,每个 *** 作数只能使用1次,运算符和括号可以多次使用,注意所有的中间结果都必须是整数。

输入格式

输入包括多行,每行4个正整数,范围是[1,13],输入以0 0 0 0标记结束

输出格式

若输入的4个 *** 作数能计算出24,输出Yes,否则输出No

输入样例 复制

1 1 1 1
2 5 7 8
0 0 0 0

输出样例 复制

No
Yes

分类标签

递归算法 

#include

#include

#include

using namespace std;

int num[4];

bool judge24(int n){

  if(n==1) return num[0]==24;

  for(int i=0;i

    for(int j=i+1;j

    int a=num[i],b=num[j];

    num[j]=num[n-1];

    num[i]=a+b;

    if(judge24(n-1)==true)return true;

    num[i]=a-b;

    if(judge24(n-1)==true)return true;

    num[i]=b-a;

    if(judge24(n-1)==true)return true;

    num[i]=a*b;

    if(judge24(n-1)==true)return true;

    if(b!=0 && a%b==0){

      num[i]=a/b;

      if(judge24(n-1)==true) return true;

    }

    if(a!=0 && b%a==0){

      num[i]=b/a;

      if(judge24(n-1)==true) return true;

    }

    num[i]=a;

    num[j]=b;

    }

  }

  return false;

}

int main(){

  while(cin>>num[0]>>num[1]>>num[2]>>num[3] ){

    if(num[0]==0) break;

    if(judge24(4)==true) cout<<"Yes"<

    else cout<<"No"<

  }

  return 0;

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/719316.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)