萌新首发暴力题解,大佬忽喷

不得不说,个人认为许多大佬们把程序想复杂了,所以码量很长,但是实际上这题并不要这么复杂。。。

可以考虑用一个\(dfs\)维护一个状态\(f(n)[a_1,a_2……a_n]\)

接下来我们暴力枚举两两配对的方案,对于每个\(a[i]\),\(a[j]\)只要算出两数的较大值和较小值再进行模拟加减乘除运算即可。

至于评论区里提到的反减和反除其实是不必考虑的,试想我们每次都是用较大值减较小值,较大值除较小值,也就不可能出现小减大或者小除大的情况。

而对于\(a[i]\),\(a[j]\)两两配对,可以将他们运算的结果存入\(a[i]\),而\(a[j]\)可以存\(a[n]\)的量。说白了就是简单的滚动数组啦~

那么这个状态就被压缩成了\(f(n-1)[a_1,a_2……a_{n-1}]\),继续\(dfs\)。

对于边界处理,即当\(n=1\)时状态变为了\(f(1)[a_1]\),\(a_1\)就是最终结果。若\(a_1=24\)说明成立,过程在每次运算中维护就\(ok\)了。

#include<bits/stdc++.h>
using namespace std;
int num[10],f[20];
char ch[10];
bool Game(int n){
if(n==1){//边界
if(num[1]==24)return true;//判结果
else return false;
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){//两两匹配,即可模拟所有可能
int ti=num[i],tj=num[j];//保留原结果
int a=max(ti,tj);
int b=min(ti,tj);//取较大较小值
int t=4-n;
num[j]=num[n];//压缩数组
//初始化
f[t*3+1]=a;
f[t*3+2]=b;
f[t*3+3]=a+b;
ch[t+1]='+';//记录运算过程
num[i]=a+b;//做加法
if(Game(n-1))return true;//DFS f[t*3+1]=a;
f[t*3+2]=b;
f[t*3+3]=a-b;
ch[t+1]='-';//记录运算过程
num[i]=a-b;//做减法
if(Game(n-1))return true;//DFS f[t*3+1]=a;
f[t*3+2]=b;
f[t*3+3]=a*b;
ch[t+1]='*';//记录运算过程
num[i]=a*b;//做乘法
if(Game(n-1))return true;//DFS if(b!=0&&a%b==0){//判断是否除的尽
if(a/b>=1){
f[t*3+1]=a;
f[t*3+2]=b;
f[t*3+3]=a/b;
ch[t+1]='/';//记录运算过程
num[i]=a/b;//做除法
if(Game(n-1))return true;//DFS
}
} num[i]=ti;
num[j]=tj;//答案错误还原之前结果
}
}
return false;
}
int main(){
for(int i=1;i<=4;i++){
cin>>num[i];
}
if(Game(4)){
cout<<f[1]<<ch[1]<<f[2]<<'='<<f[3]<<endl;
cout<<f[4]<<ch[2]<<f[5]<<'='<<f[6]<<endl;
cout<<f[7]<<ch[3]<<f[8]<<'='<<f[9]<<endl;//暴力输出
}else{
cout<<"No answer!"<<endl;
}
return 0;
}

\(\operatorname{Update} \operatorname{On} \operatorname{2018.12.01}\)

最新文章

  1. VS VA助手补丁覆盖目录
  2. ECMAScript中关于如何获取this的定义
  3. rdp爆破工具 Fast RDP Brute
  4. asp.net页面间传值方式
  5. 安卓中adapter的应用
  6. js常用功能汇总
  7. WebApi接口访问频率控制的实现
  8. 最常用的动态sql语句梳理——分享给使用Mybatis的小伙伴们!
  9. 各个Maven仓库镜像(包括国内)
  10. PAT1004
  11. redis下载安装以及添加服务
  12. acl.go
  13. Python + selenium + pycharm 环境部署细节 和selenium、Jenkins简单介绍
  14. 如何设置C-Lodop打印控件的端口
  15. luogu P4148 简单题
  16. 【python】del
  17. PHP $a=&#39;abcdef&#39;;请取出$a的值并打印第一个字母
  18. RESTful记录-RESTful服务
  19. QtWebKit
  20. 理解js中的new

热门文章

  1. IIS部署FLASK网站
  2. 二级C语言模拟试题(第1套)
  3. vmware 虚拟机中有时获取不到IP地址
  4. javascript异步上传压缩图片并立即显示图片
  5. windows系统常用命令
  6. MD5用户密码加密工具类 MD5Util
  7. 【转帖】Spark设计理念与基本架构
  8. .NET平台历程介绍
  9. PAT甲级1006水题飘过
  10. JAVA调用ORACLE存储过程时间类型参数没有日期