7-5 3824经典游戏分数 20 作者 李佳单位 重庆大学
作者 李佳
单位 重庆大学
24点游戏,也叫3824游戏,是一款经典的心算数字游戏。给出区间[1,13]内的四个整数,验证能否用加、减、乘、除四则运算,将这四个整数组合成24。比如:(3,8,2,4) 可以算出 8∗(4−3+2)=24或者(8−4)∗(2∗3)=24,而(1,1,2,2)无法算出24。注意整除必须除尽,即9/2+10+10=24这种计算无效。
输入格式:
第一行给出正整数N(1≤N≤1000)。接下来N行数据,每行给出四个正整数ai bi ci di, 用空格分开。(∀i∈{1,...,N}:1≤ai,bi,ci,di≤13)
输出格式:
输出N行数据,第i行对应输入数据(ai,bi,ci,di),如果能算出24,则输出24,如果不能则输出0。
输入样例:
4
1 1 1 1
1 2 3 4
3 9 11 2
13 3 5 7
输出样例:
0
24
0
24
(1,1,1,1)和(3,9,11,2)都无法算出24,(1,2,3,4)和(13,3,5,7)可以算出:1∗2∗3∗4=24和(13∗5+7)/3=24。
个人思路:
借鉴了大佬的思路,但不足以解决问题,请教了学长,知道解题算法中的缺点,改正并记录一下。
此题大意是计算4个数通过各种组合能否计算出结果24,我们通过回溯还是可以遍历每一种加减乘除的可能,唯一不足就是,此题要求考虑括号,如果我们按照顺序计算四个数,那么肯定我们是无法实现括号的优先级功能的,此时大佬的思路:双层循环简直天神下凡,我们可以用这个双层循环实现4个数中任意两个数一起计算的可能,那么括号这个大问题就算解决了。
第二个问题,在回溯过程中,由于我们是通过双层循环选取的任意两个数,对于加法,两个数先后顺序是无所谓的,但在减法和除法中,两个数先后顺序不同会产生两种不同结果,于是我们要多加一次减法和除法。
来看代码:
#include<iostream>
using namespace std;
int arr[4];
bool dfs(int n)//n初始时等于4,每进行一次计算就减1
{if (n == 1) //设置终点,返回计算结果是否等于24return arr[0] == 24;for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){if (i == j) //同一个数就跳过continue;int op1 = arr[i], op2 = arr[j]; //op1和op2一会儿用来进行计算和恢复现场arr[i] = op1 + op2;arr[j] = arr[n - 1];//由于arr[j]已经被用掉了,要把此时未计算的队尾元素拿过来if (dfs(n - 1))return 1;arr[i] = op1 - op2;if (dfs(n - 1))return 1;arr[i] = op2 - op1;//减法多进行一次if (dfs(n - 1))return 1;arr[i] = op1 * op2;if (dfs(n - 1))return 1;if (op2 != 0 && op1 % op2 == 0){arr[i] = op1 / op2;if (dfs(n - 1))return 1;}if (op1 != 0 && op2 % op1 == 0)//除法多进行一次{arr[i] = op2 / op1;if (dfs(n - 1))return 1;}arr[i] = op1;arr[j] = op2;}}return 0;
}
int main()
{int n;cin >> n;while (n--){cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];if (dfs(4))cout << "24" << endl;else cout << "0" << endl;}
}
7-5 3824经典游戏分数 20 作者 李佳单位 重庆大学相关推荐
- 7-3 找零钱***分数 20作者 李祥单位 湖北经济学院
作者 李祥 单位 湖北经济学院 收银员现有 n 张面值分别为 v1,v2,...,vn 的纸币.若找零金额为 m,则一共有多少种找零方法? 注:0<n≤1000,0<v1,v2, ...
- 整除光棍 分数 20作者 翁恺单位 浙江大学
这里所谓的"光棍",并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数整除.比如,111111就可以被13整 ...
- 7-9 矩阵乘法分数 25作者 arbalest单位 河北大学
给出一个大小为N1×M1 的矩阵A和一个大小为N2×M2的矩阵B, 令矩阵C=A×B, 输出C. 矩阵乘法的公式为Ci,j=k=1∑M1Ai,k∗Bk,j, 矩阵C的第i行第j列是C ...
- R7-1 jmu-python-找字符分数 15作者 linli单位 集美大学输入一个字符串及字符,输出第一次出现该字符的位置。输入格式:行1:输入字符串行2:输入一个字符输出格式:
R7-1 jmu-python-找字符 输入一个字符串及字符,输出第一次出现该字符的位置. 输入格式: 行1:输入字符串 行2:输入一个字符 输出格式: 找到,输出对应位置,格式index=X的, X ...
- PAT1014 福尔摩斯的约会 分数 20
1014 福尔摩斯的约会 分数 20 作者 CHEN, Yue 单位 浙江大学 大侦探福尔摩斯接到一张奇怪的字条: 我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb ...
- PAT1019 数字黑洞 分数 20
1019 数字黑洞 分数 20 作者 CHEN, Yue 单位 浙江大学 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 ...
- 重温历史:Palm OS经典游戏于发布20年后公开源代码
整理 | 彭慧中 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 近日,慕尼黑的开发者Aaron Ardiri公布了Palm OS经典游戏的源代码,而他正是曾经开发Palm OS的工程师 ...
- 经典游戏制作教程[小糊涂的灵感]
经典游戏制作教程 peng 1.游戏制作的主要流程 -------------------------------------------------------------------------- ...
- C语言经典游戏代码大全(珍藏版)
前言 发现很多朋友都想要一些小项目来练手,却找不到从哪里寻找,给大家整理了游戏项目开发源代码汇总. 一.最经典游戏之俄罗斯方块 #include<iostream> #include< ...
最新文章
- 几种任务调度的 Java 实现方法与比较--转载
- 理解stl中的erase
- shell中的函数、shell中的数组、 告警系统需求分析
- python实现链表的删除_Python垃圾回收机制
- 计算机考研落榜了怎么办,考研落榜了怎么办
- 历时 4 年,阿里云推出金融核心系统转型实践书
- 统计twitter帖子_在Kubernetes上部署InfluxDB和Grafana以收集Twitter统计信息
- u8api openapi_使用OpenAPI规范进行更好的API测试
- 64位系统目录在那里_旷视王珏:前Adobe首席科学家,手握64项专利,曾助力奥斯卡...
- java堆栈_Java堆栈– Java堆栈
- CF 766C - Mahmoud and a Message (DP+字符串)
- Spring拦截器和过滤器的区别及详解
- LED数码管结构与工作原理
- 『原创』老范的来电防火墙v1.0发布了(图文)
- c语言嵌入式系统修炼之道
- ospf(开放式最短路径优先协议)
- VS2013 如何创建应用程序图标
- 安装Dev c++后,编译文件出现未编译的解决方法
- 【C语言中“%d %%d %%%d“代表的意思】
- 笔记本电脑突然断网,intel wireless AC 9462驱动无法启动
热门文章
- wifi连接一段时间才能上网_Win7系统下连接wifi一段时间就自动断线怎么办【图文】...
- 过了所有技术面,却倒在 HR 一个问题上
- 学术期刊数据库---EBSCO
- 数学模型转化为计算机语言,程序设计语言类课程教学选题方法探讨
- java常见的密码加密方式base64,Sha256,MD5
- 计算机输入设备的作用,认识计算机输入设备—键盘
- AI绘画是什么软件?看完你就知道了
- 蛋白质女孩---走出软件作坊:三五个人十来条枪 如何成为开发正规军(三十)
- 下载centOS,下载各种linux版本的镜像,来这里!
- CAD格式交换全能:CAD DLL 15.0 Crack