描述
有9个时钟,排成一个3*3的矩阵。现在需要用最少的移动,将9个时钟的指针都拨到12点的位置。
共允许有9种不同的移动。如下表所示,每个移动会将若干个时钟的指针沿顺时针方向拨动90度。
输入
从标准输入设备读入9个整数,表示各时钟指针的起始位置。0=12点、1=3点、2=6点、3=9点。
输出
输出一个最短的移动序列,使得9个时钟的指针都指向12点。按照移动的序号大小,输出结果。
样例输入
3 3 0
2 2 2
2 1 2
样例输出
4 5 8 9
来源
1166
分析
1、题目中的样例输入虽然是3X3的二维数组,但是此题中各元素相互关联不大,为简化代码的复杂度,可以直接使用长度为9的一维数组存储输入的时钟状态;
2、要使全部时钟状态都拨到12点位置,则数组中各元素最后的值全部都是4的倍数或者0;
3、对每一个时钟而言,把其最初的状态数字和移动的次数相加,结果能够整除4,就说明移动到12点了;
4、我们采用蛮力法,对每一个时钟,把每一个可以拨动它的方案从0次开始尝试,由于走4次就回到原位置了,所以每个时钟最多拨动3次,当9个时钟全部吻合条件时,将9种方案的次数保存下来,并输出对应的数字。
代码(C语言)
#include <stdio.h>
int main(){
int