116. 飞行员兄弟 Java题解
注意:如果存在多种打开冰箱的方式,则按照优先级整体从上到下,同行从左到右打开。
数据范围
1≤i,j≤4
输入样例:
-+--
----
----
-+--
输出样例:
6
1 1
1 3
1 4
4 1
4 3
4 4
解题思路:
先将4*4的16个格子中所有可能出现的情况枚举一次,接着按照枚举的方案对灯泡进行操作,最后判断是否满足条件。
Java代码:
import java.io.*;public class Main {static char [][]s = new char[4][4];static char [][]temp = new char[4][4];static StringBuilder ansStep = new StringBuilder();static StringBuilder res = new StringBuilder();public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));for(int i = 0; i < 4; i++) {String str = br.readLine();for(int j = 0; j < 4; j++) {s[i][j] = str.charAt(j);}}int ans = Integer.MAX_VALUE;for(int op = 0; op < 1 << 16; op++) {//比用四个for清晰for(int i = 0; i < 4; i++) {//在备份数组上操作for(int j = 0; j < 4; j++) {temp[i][j] = s[i][j];}}int step = 0;res = new StringBuilder();for(int i = 0; i < 4; i++) {//两个for是为了得出数组整体的相对位置posfor(int j = 0; j < 4; j++) {int pos = i * 4 + j;//将二维坐标一维化的编号if((op >> pos & 1) == 1) {step++;turn_all(i, j);res.append((i + 1) + " " + (j + 1) + "\n");}}}boolean flag = true;//检查for(int i = 0; i < 4; i++) {for(int j = 0; j < 4; j++) {if(temp[i][j] == '+')flag = false;}}if(flag) {if(ans > step) {ans = step;ansStep = res;}}}System.out.println(ans);System.out.print(ansStep);}public static void turn_all(int x, int y) {for(int i = 0; i < 4; i++) {turn_one(x, i);turn_one(i, y);}turn_one(x, y);//多算了一次}public static void turn_one(int x, int y) {if(temp[x][y] == '+') {temp[x][y] = '-';}else {temp[x][y] = '+';}}
}
116. 飞行员兄弟 Java题解相关推荐
- 飞行员兄弟 JAVA题解
"飞行员兄弟"这个游戏,需要玩家顺利的打开一个拥有16个把手的冰箱. 已知每个把手可以处于以下两种状态之一:打开或关闭. 只有当所有把手都打开时,冰箱才会打开. 把手可以表示为一个 ...
- AcWing 116. 飞行员兄弟(二维指数型枚举)
116. 飞行员兄弟 思路: 通过二进制串暴力枚举所有操作情况 从左上到右下扫描二进制串 (当一个答案存在多种操作情况时保证优先级整体从上到下,同行从左到右打开) 把每次的操作坐标存放到ArrayLi ...
- 飞行员兄弟 Java版
"飞行员兄弟"这个游戏,需要玩家顺利的打开一个拥有16个把手的冰箱. 已知每个把手可以处于以下两种状态之一:打开或关闭.只有当所有把手都打开时,冰箱才会打开.把手可以表示为一个4х ...
- 116. 飞行员兄弟【二进制枚举】
二进制枚举即可,需要注意的是,这道题和费解的开关还是有不同点的. 费解的开关枚举第一行就行了,因为它有依赖关系的. 而这个是一个十字形,无那种关系.故直接暴力枚举邓按不按的所有情况即可. #inclu ...
- Java实现十字形开关问题(“飞行员兄弟“)
主要通过位运算 "飞行员兄弟"这个游戏,需要玩家顺利的打开一个拥有 16 个把手的冰箱. 已知每个把手可以处于以下两种状态之一:打开或关闭. 只有当所有把手都打开时,冰箱才会打开. ...
- Acwing---116.飞行员兄弟
飞行员兄弟 1.题目 2.基本思想 3.代码实现 1.题目 "飞行员兄弟"这个游戏,需要玩家顺利的打开一个拥有 16 个把手的冰箱. 已知每个把手可以处于以下两种状态之一:打开或关 ...
- java变量中不属于复合类型的数据类型是_2006新版JAVA题解(JAVA简单数据类型)...
2006新版JAVA题解(JAVA简单数据类型) 2007年1月22日来源:233网校网校课程 在线题库评论 分享到 1.下列哪一个是合法的标识符: A.12class; B.+viod; C.-5; ...
- 2020第五届上海第二工业大学新生程序设计竞赛(Java题解)
2020第五届上海第二工业大学新生程序设计竞赛(Java题解) 作为C/C++版本的补充题解,仅供参考 需要解析的可以看这篇: 2020第五届上海第二工业大学新生程序设计竞赛 用Java语言参加竞赛时 ...
- 笔试编程题 拼凑正方形 Java题解 牛牛有4根木棍,长度分别为a,b,c,d。羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一。牛牛需要用这四根木棍拼凑一个正方
题目描述 牛牛有4根木棍,长度分别为a,b,c,d.羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一.牛牛需要用这四根木棍拼凑一个正方形出来,牛牛最少需要支付多少硬 ...
最新文章
- Python部署与安装
- 国际化组件 Unicode (ICU) 函数库
- 怎么看so文件是哪个aar引进来的_手机爱奇艺下载视频存在哪个文件夹
- 安卓开发学习笔记(六):如何实现指定图片定时开屏功能?
- 使用数据模板自定义数据显示
- 《Getting Started with WebRTC》第二章 WebRTC技术介绍
- 三进制计算机_要做一个编程界优秀的攀登者,首先要认真计算机中的0和1
- 内容管理项目小结 成功案例-公司官网,游戏官网
- raspberrypi 与 arduino 使用 nRF24L01+ 通信 -- arduino为接收端
- java实现QQ登录
- 大数据小项目之电视收视率企业项目03
- 笔记本电脑下面的任务栏一直转圈圈
- python+编译器 下载、安装
- 北航计算机学院复试专业课科目,2018北航自招复试经历总结
- php漂浮,【飘】【漂】:【飘浮】【漂浮】、【漂泊】【飘泊】【飘薄】
- Exemplar Fine-Tuning for 3D Human Model Fitting Towards In-the-Wild 3D Human Pose Estimation 2020阅读理
- 我的星座图 php,星座图映射
- SQL中日期函数的运用
- 做一个展示型企业网站要多少钱
- 好的idea配色方案
热门文章
- Linux 安装docker教程
- 10亿数据找出前100大的数据(网易大数据面试算法题)
- 系统如何自动识别短信验证码
- sqlDbx连接oracle64位
- 解决VS中的 无法启动程序,系统找不到指定文件 问题
- 【我的Android进阶之旅】繁体字的标点符号应该是居中还是在左下角?
- redux与react-redux的区别:
- 数据库在网站中的作用
- FIP: A fast overlapping community-based influence maximization algorithm using probability coefficie
- 深度学习基础知识(人工智能)