拨钟问题 有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

正确答案:每种移动做0~3次(4次抵消),4^9枚举。移动i对相应时钟+1 mod4,全0即解,取步数最少、序号字典序最小:\nfor a in range(4):\n for b in range(4):\n ...(9层循环)\n clk=[0]*9;应用9种移动对应的位掩码;if all((clk[j]+off)%4==0)记录并输出
试卷来源:202112 青少年等级考试C/C++真题三级