题解 | #24点游戏算法#

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

// HJ67 24点游戏算法.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include<iostream>
#include<bits/stdc++.h>

using namespace std;

double cut(double a, double b, char op)//运算包含有括号的情况
{
	switch (op)
	{
		case '+':return a + b; 
		case '-':return a - b; 
		case '*':return a * b; 
		case '/':return a / b; 
	}
	return 0;
}

bool check(vector<double>& dp)//check函数,检查是否为胜利数
{
	vector<char>op = { '+','-','*','/' };//定义一个char类型的数组
	sort(dp.begin(), dp.end());
	do
	{
		for (int i = 0; i < 4; i++)//四个数字有三个运算符
		{
			for (int j = 0; j < 4; j++)
			{
				for (int k = 0; k < 4; k++)
				{
					double first = cut(dp[0], dp[1], op[i]);
					double second = cut(first, dp[2], op[j]);
					double res = cut(second, dp[3], op[k]);
					if (res == 24)
					{
						return true;
					}
				}
			}
		}

	} while (next_permutation(dp.begin(), dp.end()));//执行下一次排序,如有下一次排序则返回true程序循环,如没有返回false推出循环
	return false;
}

int main()
{
	vector<double>dp(4);
	//for (int i = 0; i < 4; i++)
	//{
	//	cin >> dp[i];
	//}
	while (cin >> dp[0] >> dp[1] >> dp[2] >> dp[3])//连续输入
	{
		if (check(dp))
		{
			cout << "true" << endl;
		}
		else
		{
			cout << "false" << endl;
		}
	}
	return 0;
}

全部评论

相关推荐

06-07 21:26
江南大学 C++
话不多说,直接上时间线和图片1.2024年10月底发offer,并签三方2.2025年5月底公司违约
从零开始的转码生活:希望所有签了三方但直接违约的公司都倒闭!都倒闭!都倒闭!
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务