[笔记][中国大学mooc][程序设计与算法(二) 算法基础][枚举][局部枚举法] 拨钟问题

本文主要是介绍[笔记][中国大学mooc][程序设计与算法(二) 算法基础][枚举][局部枚举法] 拨钟问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

有9个时钟,排成一个3*3的矩阵
在这里插入图片描述
现在需要用最少的移动,将9个时钟的指针都拨到12点的位置。共允许有9种不同的移动。如下表所示,每个移动会将若干个时钟的指针沿顺时针方向拨动90度。

移动 影响的时钟

1 ABDE
2 ABC
3 BCEF
4 ADG
5 BDEFH
6 CFI
7 DEGH
8 GHI
9 EFHI

输入

9个整数,表示各时钟指针的起始位置,相邻两个整数之间用单个空格隔开。其中,0=12点、1=3点、2=6点、3=9点。

输出

输出一个最短的移动序列,使得9个时钟的指针都指向12点。按照移动的序号从小到大输出结果。相邻两个整数之间用单个空格隔开。

样例输入
3 3 0
2 2 2
2 1 2
样例输出
4 5 8 9

分析

会影响B的操作:1、2、3、5
所以只要遍历操作1、2、3的所有情况,
可以确定操作4的次数让A归位至12点;
可以确定操作5的次数让B归位至12点;
可以确定操作6的次数让C归位至12点;
可以确定操作7的次数让D归位至12点;
可以确定操作8的次数让G归位至12点;
可以确定操作9的次数让F归位至12点;

然后观察是否EHI是否已经归位至12点

代码

#include <iostream>
using namespace std;
int main(){char puzzle[9];char operation[9];bool solved = false;for(int cnt1=0; cnt1<9; cnt1++){cin >> puzzle[cnt1]; puzzle[cnt1] -= '0';}for(operation[0] = 0; operation[0] < 4; operation[0]++){for(operation[1] = 0; operation[1] < 4; operation[1]++){for(operation[2] = 0; operation[2] < 4; operation[2]++){operation[3] = (4-((puzzle[0]+operation[0]+operation[1])%4))%4;operation[4] = (4-((puzzle[1]+operation[1]+operation[2]+operation[0])%4))%4;operation[5] = (4-((puzzle[2]+operation[1]+operation[2])%4))%4;operation[6] = (4-((puzzle[3]+operation[0]+operation[3]+operation[4])%4))%4;operation[7] = (4-((puzzle[6]+operation[3]+operation[6])%4))%4;operation[8] = (4-((puzzle[5]+operation[2]+operation[4]+operation[5])%4))%4;if(!(((puzzle[4]+operation[0]+operation[2]+operation[4]+operation[6]+operation[8])%4)+((puzzle[7]+operation[4]+operation[6]+operation[7]+operation[8])%4)+((puzzle[8]+operation[5]+operation[7]+operation[8])%4)))solved = true;if(solved) break;}if(solved) break;}if(solved) break;}for(int cnt1=0; cnt1<9; cnt1++) while((operation[cnt1]--)%4) cout << cnt1+1 << ' ';return 0;
} 

这篇关于[笔记][中国大学mooc][程序设计与算法(二) 算法基础][枚举][局部枚举法] 拨钟问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/953607

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec