拨钟问题(蛮力法)

描述
有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 
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值