首页 > 代码库 > 24点游戏
24点游戏
24点游戏
题目描述
给出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
通过递归循环,暴力穷举,计算每两个数之间的每种运算
题目描述
给出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<iostream>
#include<string.h>
using
namespace
std;
double
x[4];
//输入的4个整数
int
f(
int
n)
{
if
(n==1)
{
if
(x[0]==24)
return
1;
else
return
0;
}
for
(
int
i=0;i<n;i++)
{
for
(
int
j=i+1;j<n;j++)
//从数组中任取两个数的组合
{
double
a,b;
a=x[i];
b=x[j];
x[j]=x[n-1];
//将第一个数覆盖掉,长度减一
//运算
// a+b
x[i]=a+b;
if
(f(n-1))
return
1;
// a-b
x[i]=a-b;
if
(f(n-1))
return
1;
// b-a
x[i]=b-a;
if
(f(n-1))
return
1;
// a*b
x[i]=a*b;
if
(f(n-1))
return
1;
if
(b!=0)
{
// a/b
x[i]=a/b;
if
(f(n-1))
return
1;
}
if
(a != 0)
{
// b/a
x[i]=b/a;
if
(f(n-1))
return
1;
}
x[i]=a;
//将数组还原
x[j]=b;
}
}
return
0;
}
int
main()
{
while
(cin>>x[0]>>x[1]>>x[2]>>x[3])
{
if
(x[0]!=0||x[1]!=0||x[2]!=0||x[3]!=0)
{
if
(f(4))
cout <<
"Yes"
<< endl;
else
cout <<
"No"
<< endl;
}
else
return
0;
}
return
0;
}
若找到满足,则返回1并跳出循环,在每一次运算后还需将数组还原
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。