[笔记][中国大学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

相关文章

关于redis一些问题记录

问题一:启动redis时出现警告,使用下列命令(已解决)       问题二:启动时,需要解决的警告(未解决)       问题三:使用自己的配置文件启动redis时,可能会遇到: Could not connect to Redis at 127.0.0.1:6379: Connection refused 原因:6379 没有断开,使用“exit”后,重新使用redis-c

selenium +java 多个类公用driver问题

问题点:太久没有写selenium代码,居然把driver公用的问题忘记了,即:每写一个测试类,执行过程中都会新建一个窗口,这样应该说是非常不专业的。 大概想了一个方法,虽然看起来也不怎么专业,但感觉能用就很开心了。 解决步骤:                1 创建一个获取获取driver的方法getDriver()                2 创建成员变量,将 getDriver()赋值

mybaits基础增删改查-------mybatis(四)

Mybatis的增删改查 mybatis流程: 1 创建实体类及接口方法 2 创建全局配置文件 configuration.xml 3 创建 sql 映射文件 BlogMapper.xml 4 将全局文件中维护 sql映射文件配置 5 调用java API 执行相关sql操作 注意sqlSession是线程非安全的 实体java类: package model;public class Blo

sort常用排序模式---------shell基础篇(三)

sort 排序命令使用 表达式意义sort -c test测试文件“test”是否已经经过排序,一般用处不大sort -k1 test.txt按照第1域对文件test.txt进行排序,日常可以用来对合并的日志文件进行时间排序sort -k1 -m log1.txt log2.txt按照第一域进行排序后合并输出到控制台,建议使用“>>” 将合并内容输出到另一个文件中sort -t / -k3 te

threejs坑记录-笔记

雪花 注意depthTest: false 否则会出现有transparent无效 const createSnow = () => {let map = new THREE.TextureLoader().load(snow);let material = new THREE.SpriteMaterial({map: map,transparent: true,side: THREE.Dou

关于新版adt22.6.0的相关问题(自己总结)

首先说自己手贱的很,一不小心就更新了adt,导致现在各种问题频出。在网上找到了解决方案  在百度经验《 关于新版ADT创建项目时出现appcompat_v7的问题》!!!这个教程会告诉我们把appcompat_v7作为一个库项目,只有它点击 isLibrary,而你的项目千万不要点击islibrary,否则会在导出的时候出现There is no android project named xx

算法的设计方式

1.贪心算法 贪心算法(又称贪婪算法)是指在对问题求解时,从问题的某一个初始解出发,总是做出在当前看来最好的选择,当达到某算法中的某一步不能再继续前进时,算法停止。这时,就得到了问题的一个解,但不能保证求得的最后解是最优的。也就是说,不从整体最优上加以考虑,它所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题能产生整体最优解或者是整体最优解

冒泡算法及改进(属于交换排序)

冒泡排序(Bubble Sort)是一种交换排序,快速排序也属于一种交换排序。冒泡排序的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。 假设一共共有 n 个数,则会进行 (n-1)趟比较,由1,2......n-1这么多趟,第一趟进行 (n-1)次比较,.......第n-1趟进行1次比较,故有公式:第i趟 +  第i趟的比较次数 = n       时间复杂度为

Linux删除大文件rm -rf的问题

请几天,我删除系统汇总的大文件,大约100G左右,当我使用rm -rf  xxxx.log删除后,使用df -h发现空间并未释放。 一开始以为是由于磁盘虚拟挂载,导致我删除的文件并不是当前目录的文件。但后来发现并不是。 我在网络上搜索发现都是  要: lsof | grep delete kill -9 xxx 但是我觉得这样不安全。 比如文件被进程锁定,或者有进程一直在向这个文件写数

剑指Offer面试题34题:丑数(Ugly Number)(while循环里面的三个小问题)

语言:C/C++语言 IDE:    Mac/Xcode  丑数:我们把只包含因子2、3、5的数称为丑数(Ugly Number),求按照从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯我们把1当做第一个丑数。 分析:所谓一个数m是另一个数n的因子,是指n%m==0。根据丑数的定义,丑数能被2,3,5整除,也就是一个数能连续的被2整除,或者连续的被3整