002:拨钟问题https://www.cnblogs.com/MalcolmMeng/p/9085175.html
002:拨钟问题
总时间限制:
1000ms
内存限制:
65536kB
描述
有9个时钟,排成一个3*3的矩阵。
|-------| |-------| |-------| | | | | | | | |---O | |---O | | O | | | | | | | |-------| |-------| |-------| A B C |-------| |-------| |-------| | | | | | | | O | | O | | O | | | | | | | | | | |-------| |-------| |-------| D E F |-------| |-------| |-------| | | | | | | | O | | O---| | O | | | | | | | | | |-------| |-------| |-------| G H I (图 1)
现在需要用最少的移动,将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
这道题,我和我的爸爸用了整整一周的时间来做,现在终于搞好了,虽然程序很长,都是都对了,给大家看看我自己的代码,完全是我和我爸爸的思路,绝对没有抄袭。
我的代码:
’
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string.h>
#include <string>
using namespace std;
int a[9],d[9]={0,0,0,0,0,0,0,0,0};
bool b[9];
int c[10],sum[64],num[64];
void b1()
{
a[0]++;
if(a[0]==4)
a[0]=0;
a[1]++;
if(a[1]==4)
a[1]=0;
a[3]++;
if(a[3]==4)
a[3]=0;
a[4]++;
if(a[4]==4)
a[4]=0;
}
void b2()
{
a[0]+=1;
if(a[0]>3)
a[0]=0;
a[1]+=1;
if(a[1]>3)
a[1]=0;
a[2]+=1;
if(a[2]>3)
a[2]=0;
}
void b3()
{
a[1]+=1;
if(a[1]>3)
a[1]=0;
a[2]+=1;
if(a[2]>3)
a[2]=0;
a[4]+=1;
if(a[4]>3)
a[4]=0;
a[5]+=1;
if(a[5]>3)
a[5]=0;
}
void b4()
{