初学算法之枚举---拨钟问题

简介: 初学算法之枚举---拨钟问题

分析:每次拨动钟顺时针转动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+" ");
            }
        }
    }
}
相关文章
|
7月前
|
算法
class083 动态规划中用观察优化枚举的技巧-下【算法】
class083 动态规划中用观察优化枚举的技巧-下【算法】
51 2
|
7月前
|
算法
class082 动态规划中用观察优化枚举的技巧-上【算法】
class082 动态规划中用观察优化枚举的技巧-上【算法】
59 2
|
6月前
|
算法 JavaScript 程序员
程序员必知:《程序设计与算法(二)算法基础》《第一周枚举》熄灯问题POJ
程序员必知:《程序设计与算法(二)算法基础》《第一周枚举》熄灯问题POJ
35 0
|
7月前
|
算法
枚举算法的介绍
枚举算法的介绍
73 0
|
7月前
|
算法
枚举算法:解决问题的穷举之道(二)
枚举算法:解决问题的穷举之道(二)
|
7月前
|
算法
枚举算法:解决问题的穷举之道(一)
枚举算法:解决问题的穷举之道(一)
|
7月前
|
机器学习/深度学习 人工智能 算法
算法02-入门算法枚举与模拟算法
算法02-入门算法枚举与模拟算法
|
算法 测试技术 C#
C++单调向量算法:132模式枚举1简洁版
C++单调向量算法:132模式枚举1简洁版
|
算法 测试技术 C#
C++二分查找算法:132模式枚举3简洁版
C++二分查找算法:132模式枚举3简洁版
|
算法 测试技术 C#
C++二分查找算法:132 模式解法三枚举1
C++二分查找算法:132 模式解法三枚举1