分析:每次拨动钟顺时针转动90°的效果 就是将数值加一
是0到3的循环,钟状态总共有四种:0 1 2 3 枚举四种状态 先枚举A B C的状态,
确定A B C之后,
D E F也可以确定因为只有 D E F
才能改变A B C状态
拨动次数:0次和4次是一样的效果
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * @ClassName 拨钟问题 * @Author ACER * @Description 顺时针拨动,意思就是:将数值加1 ,0代表十二点 * 枚举所有情况9重循环枚举四种状态0,1,2,3 * 循环中无论取什么次数, * * * @Date 2021/7/12 12:56 * @Version 1.0 **/ public class Main{ public static void main(String[] args) throws IOException { int []ori=new int[10]; BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); int index=0; for (int i = 0; i < 3; i++) { String data = reader.readLine(); String[] nums = data.split(" "); for (int j = 0; j < nums.length; j++) { int anInt = Integer.parseInt(nums[j]); ori[++index]=anInt; } } int min_cnt=9999; int []moveCnt=new int[10]; for (int i1 = 0; i1 < 4; i1++) { for (int i2 = 0; i2 < 4; i2++) { for (int i3 = 0; i3 < 4; i3++) { for (int i4 = 0; i4 < 4; i4++) { for (int i5 = 0; i5 < 4; i5++) { for (int i6 = 0; i6 < 4; i6++) { for (int i7 = 0; i7 < 4; i7++) { for (int i8 = 0; i8 < 4; i8++) { for (int i9 = 0; i9 < 4; i9++) { //作用的效果是:拨动一次其周围的钟数值加一 //1 这个位置受 1 2 4影响依次类推 //2 受1 2 3 5 影响 if ( 0==(ori[1]+i1+i2+i4)%4&& 0==(ori[2]+i1+i2+i3+i5)%4&& 0==(ori[3]+i2+i3+i6)%4&& 0==(ori[4]+i1+i7+i4+i5)%4&& 0==(ori[5]+i1+i3+i5+i9+i7)%4&& 0==(ori[6]+i3+i6+i9+i5)%4&& 0==(ori[7]+i7+i8+i4)%4&& 0==(ori[8]+i7+i8+i9+i5)%4&& 0==(ori[9]+i6+i8+i9)%4){ //总共移动次数 int sum=i1+i2+i3+i4+i5+i6+i7+i8+i9; if (min_cnt>sum){ min_cnt=sum; moveCnt[1]=i1; moveCnt[2]=i2; moveCnt[3]=i3; moveCnt[4]=i4; moveCnt[5]=i5; moveCnt[6]=i6; moveCnt[7]=i7; moveCnt[8]=i8; moveCnt[9]=i9; } } } } } } } } } } } for (int i = 1; i <= 9; i++) { for (int j = 0; j <moveCnt[i] ; j++) { System.out.print(i+" "); } } } }