zoukankan      html  css  js  c++  java
  • 有100盏灯,分别写上编号1~100,同样地 有100个开关,写上编号1~100。当我按1号开关,写上1的倍数的灯会开/关(如果灯开着就关,相反地,关着就会开),当我按2号开关,写上2的倍数的灯会开/关,如此类推

    问题: 有100盏灯,分别写上编号1~100,同样地 有100个开关,写上编号1~100。当我按1号开关,写上1的倍数的灯会开/关(如果灯开着就关,相反地,关着就会开),当我按2号开关,写上2的倍数的灯会开/关,如此类推。

    问:如果一开始所有灯都亮着,当我每个开关都按一下之后,会有几多盏灯会开着? 他们的编号又是什么?

    首先的个人想法:

    • 根据编号能否被整除来确定是否按一次对应编号的灯,是相对独立的,意味着先按后按都没有关系,只要遍历所有操作就可以。
    • 那么反过来推想,能被100整除的数,只有100,所以100会被按一次,100熄灭,然后99只能被99整除,故99熄灭···
    • 以上类推,那么每个灯都会灭掉。所以亮着的灯是0盏。

    总结分析:100的并不是只能被100整除,他还可以被2,4,5,20,25··等数字整除,意味着100号等不止被操作一遍,所以结果不正确。

    再根据数学逻辑分析:

    • 显然,灯如果一开始就亮着,那么当它被操作偶数次的时候,它仍旧会亮着,当他被操作奇数次的时候,它会是熄灭的。
    • 这样一来,问题就是变成了每个编号的数字,在1~100里面有多少个约数。
    • 一开始尝试使用数学的方法找公因数,公倍数什么的简单解决,没有头绪,只好使用暴力破解,上代码,跑出结果来。
    public void light(){
            HashMap<Integer,String> hashMap = new HashMap<>();
            //初始化状态为亮的
            for(int i=1;i<=100;i++){
                hashMap.put(i,"亮");
            }
            //遍历所有操作,并记录输出过程
            for(int i=1;i<=100;i++){
                System.out.println("_____________num:"+i+"__________________");
                for (int j=1;j<=100;j++) {
                    if(j%i==0){
                        if (hashMap.get(j).equals("亮")) {
                            hashMap.put(j,"暗");
                            System.out.println(j+"set :"+hashMap.get(j));
                            continue;
                        }
                        if (hashMap.get(j).equals("暗")){
                            hashMap.put(j,"亮");
                            System.out.println(j+"set :"+hashMap.get(j));
                        }
                    }
                }
            }
            //输出最后结果
            for (int i=1;i<=100;i++){
                System.out.println(i+"__"+hashMap.get(i));
            }
    
    
        }
    
    
    _____________num:1__________________
    1set :暗
    2set :暗
    3set :暗
    4set :暗
    5set :暗
    6set :暗
    7set :暗
    8set :暗
    9set :暗
    10set :暗
    11set :暗
    12set :暗
    13set :暗
    14set :暗
    15set :暗
    16set :暗
    17set :暗
    18set :暗
    19set :暗
    20set :暗
    21set :暗
    22set :暗
    23set :暗
    24set :暗
    25set :暗
    26set :暗
    27set :暗
    28set :暗
    29set :暗
    30set :暗
    31set :暗
    32set :暗
    33set :暗
    34set :暗
    35set :暗
    36set :暗
    37set :暗
    38set :暗
    39set :暗
    40set :暗
    41set :暗
    42set :暗
    43set :暗
    44set :暗
    45set :暗
    46set :暗
    47set :暗
    48set :暗
    49set :暗
    50set :暗
    51set :暗
    52set :暗
    53set :暗
    54set :暗
    55set :暗
    56set :暗
    57set :暗
    58set :暗
    59set :暗
    60set :暗
    61set :暗
    62set :暗
    63set :暗
    64set :暗
    65set :暗
    66set :暗
    67set :暗
    68set :暗
    69set :暗
    70set :暗
    71set :暗
    72set :暗
    73set :暗
    74set :暗
    75set :暗
    76set :暗
    77set :暗
    78set :暗
    79set :暗
    80set :暗
    81set :暗
    82set :暗
    83set :暗
    84set :暗
    85set :暗
    86set :暗
    87set :暗
    88set :暗
    89set :暗
    90set :暗
    91set :暗
    92set :暗
    93set :暗
    94set :暗
    95set :暗
    96set :暗
    97set :暗
    98set :暗
    99set :暗
    100set :暗
    _____________num:2__________________
    2set :亮
    4set :亮
    6set :亮
    8set :亮
    10set :亮
    12set :亮
    14set :亮
    16set :亮
    18set :亮
    20set :亮
    22set :亮
    24set :亮
    26set :亮
    28set :亮
    30set :亮
    32set :亮
    34set :亮
    36set :亮
    38set :亮
    40set :亮
    42set :亮
    44set :亮
    46set :亮
    48set :亮
    50set :亮
    52set :亮
    54set :亮
    56set :亮
    58set :亮
    60set :亮
    62set :亮
    64set :亮
    66set :亮
    68set :亮
    70set :亮
    72set :亮
    74set :亮
    76set :亮
    78set :亮
    80set :亮
    82set :亮
    84set :亮
    86set :亮
    88set :亮
    90set :亮
    92set :亮
    94set :亮
    96set :亮
    98set :亮
    100set :亮
    _____________num:3__________________
    3set :亮
    6set :暗
    9set :亮
    12set :暗
    15set :亮
    18set :暗
    21set :亮
    24set :暗
    27set :亮
    30set :暗
    33set :亮
    36set :暗
    39set :亮
    42set :暗
    45set :亮
    48set :暗
    51set :亮
    54set :暗
    57set :亮
    60set :暗
    63set :亮
    66set :暗
    69set :亮
    72set :暗
    75set :亮
    78set :暗
    81set :亮
    84set :暗
    87set :亮
    90set :暗
    93set :亮
    96set :暗
    99set :亮
    _____________num:4__________________
    4set :暗
    8set :暗
    12set :亮
    16set :暗
    20set :暗
    24set :亮
    28set :暗
    32set :暗
    36set :亮
    40set :暗
    44set :暗
    48set :亮
    52set :暗
    56set :暗
    60set :亮
    64set :暗
    68set :暗
    72set :亮
    76set :暗
    80set :暗
    84set :亮
    88set :暗
    92set :暗
    96set :亮
    100set :暗
    _____________num:5__________________
    5set :亮
    10set :暗
    15set :暗
    20set :亮
    25set :亮
    30set :亮
    35set :亮
    40set :亮
    45set :暗
    50set :暗
    55set :亮
    60set :暗
    65set :亮
    70set :暗
    75set :暗
    80set :亮
    85set :亮
    90set :亮
    95set :亮
    100set :亮
    _____________num:6__________________
    6set :亮
    12set :暗
    18set :亮
    24set :暗
    30set :暗
    36set :暗
    42set :亮
    48set :暗
    54set :亮
    60set :亮
    66set :亮
    72set :暗
    78set :亮
    84set :暗
    90set :暗
    96set :暗
    _____________num:7__________________
    7set :亮
    14set :暗
    21set :暗
    28set :亮
    35set :暗
    42set :暗
    49set :亮
    56set :亮
    63set :暗
    70set :亮
    77set :亮
    84set :亮
    91set :亮
    98set :暗
    _____________num:8__________________
    8set :亮
    16set :亮
    24set :亮
    32set :亮
    40set :暗
    48set :亮
    56set :暗
    64set :亮
    72set :亮
    80set :暗
    88set :亮
    96set :亮
    _____________num:9__________________
    9set :暗
    18set :暗
    27set :暗
    36set :亮
    45set :亮
    54set :暗
    63set :亮
    72set :暗
    81set :暗
    90set :亮
    99set :暗
    _____________num:10__________________
    10set :亮
    20set :暗
    30set :亮
    40set :亮
    50set :亮
    60set :暗
    70set :暗
    80set :亮
    90set :暗
    100set :暗
    _____________num:11__________________
    11set :亮
    22set :暗
    33set :暗
    44set :亮
    55set :暗
    66set :暗
    77set :暗
    88set :暗
    99set :亮
    _____________num:12__________________
    12set :亮
    24set :暗
    36set :暗
    48set :暗
    60set :亮
    72set :亮
    84set :暗
    96set :暗
    _____________num:13__________________
    13set :亮
    26set :暗
    39set :暗
    52set :亮
    65set :暗
    78set :暗
    91set :暗
    _____________num:14__________________
    14set :亮
    28set :暗
    42set :亮
    56set :亮
    70set :亮
    84set :亮
    98set :亮
    _____________num:15__________________
    15set :亮
    30set :暗
    45set :暗
    60set :暗
    75set :亮
    90set :亮
    _____________num:16__________________
    16set :暗
    32set :暗
    48set :亮
    64set :暗
    80set :暗
    96set :亮
    _____________num:17__________________
    17set :亮
    34set :暗
    51set :暗
    68set :亮
    85set :暗
    _____________num:18__________________
    18set :亮
    36set :亮
    54set :亮
    72set :暗
    90set :暗
    _____________num:19__________________
    19set :亮
    38set :暗
    57set :暗
    76set :亮
    95set :暗
    _____________num:20__________________
    20set :亮
    40set :暗
    60set :亮
    80set :亮
    100set :亮
    _____________num:21__________________
    21set :亮
    42set :暗
    63set :暗
    84set :暗
    _____________num:22__________________
    22set :亮
    44set :暗
    66set :亮
    88set :亮
    _____________num:23__________________
    23set :亮
    46set :暗
    69set :暗
    92set :亮
    _____________num:24__________________
    24set :亮
    48set :暗
    72set :亮
    96set :暗
    _____________num:25__________________
    25set :暗
    50set :暗
    75set :暗
    100set :暗
    _____________num:26__________________
    26set :亮
    52set :暗
    78set :亮
    _____________num:27__________________
    27set :亮
    54set :暗
    81set :亮
    _____________num:28__________________
    28set :亮
    56set :暗
    84set :亮
    _____________num:29__________________
    29set :亮
    58set :暗
    87set :暗
    _____________num:30__________________
    30set :亮
    60set :暗
    90set :亮
    _____________num:31__________________
    31set :亮
    62set :暗
    93set :暗
    _____________num:32__________________
    32set :亮
    64set :亮
    96set :亮
    _____________num:33__________________
    33set :亮
    66set :暗
    99set :暗
    _____________num:34__________________
    34set :亮
    68set :暗
    _____________num:35__________________
    35set :亮
    70set :暗
    _____________num:36__________________
    36set :暗
    72set :暗
    _____________num:37__________________
    37set :亮
    74set :暗
    _____________num:38__________________
    38set :亮
    76set :暗
    _____________num:39__________________
    39set :亮
    78set :暗
    _____________num:40__________________
    40set :亮
    80set :暗
    _____________num:41__________________
    41set :亮
    82set :暗
    _____________num:42__________________
    42set :亮
    84set :暗
    _____________num:43__________________
    43set :亮
    86set :暗
    _____________num:44__________________
    44set :亮
    88set :暗
    _____________num:45__________________
    45set :亮
    90set :暗
    _____________num:46__________________
    46set :亮
    92set :暗
    _____________num:47__________________
    47set :亮
    94set :暗
    _____________num:48__________________
    48set :亮
    96set :暗
    _____________num:49__________________
    49set :暗
    98set :暗
    _____________num:50__________________
    50set :亮
    100set :亮
    _____________num:51__________________
    51set :亮
    _____________num:52__________________
    52set :亮
    _____________num:53__________________
    53set :亮
    _____________num:54__________________
    54set :亮
    _____________num:55__________________
    55set :亮
    _____________num:56__________________
    56set :亮
    _____________num:57__________________
    57set :亮
    _____________num:58__________________
    58set :亮
    _____________num:59__________________
    59set :亮
    _____________num:60__________________
    60set :亮
    _____________num:61__________________
    61set :亮
    _____________num:62__________________
    62set :亮
    _____________num:63__________________
    63set :亮
    _____________num:64__________________
    64set :暗
    _____________num:65__________________
    65set :亮
    _____________num:66__________________
    66set :亮
    _____________num:67__________________
    67set :亮
    _____________num:68__________________
    68set :亮
    _____________num:69__________________
    69set :亮
    _____________num:70__________________
    70set :亮
    _____________num:71__________________
    71set :亮
    _____________num:72__________________
    72set :亮
    _____________num:73__________________
    73set :亮
    _____________num:74__________________
    74set :亮
    _____________num:75__________________
    75set :亮
    _____________num:76__________________
    76set :亮
    _____________num:77__________________
    77set :亮
    _____________num:78__________________
    78set :亮
    _____________num:79__________________
    79set :亮
    _____________num:80__________________
    80set :亮
    _____________num:81__________________
    81set :暗
    _____________num:82__________________
    82set :亮
    _____________num:83__________________
    83set :亮
    _____________num:84__________________
    84set :亮
    _____________num:85__________________
    85set :亮
    _____________num:86__________________
    86set :亮
    _____________num:87__________________
    87set :亮
    _____________num:88__________________
    88set :亮
    _____________num:89__________________
    89set :亮
    _____________num:90__________________
    90set :亮
    _____________num:91__________________
    91set :亮
    _____________num:92__________________
    92set :亮
    _____________num:93__________________
    93set :亮
    _____________num:94__________________
    94set :亮
    _____________num:95__________________
    95set :亮
    _____________num:96__________________
    96set :亮
    _____________num:97__________________
    97set :亮
    _____________num:98__________________
    98set :亮
    _____________num:99__________________
    99set :亮
    _____________num:100__________________
    100set :暗
    1__暗
    2__亮
    3__亮
    4__暗
    5__亮
    6__亮
    7__亮
    8__亮
    9__暗
    10__亮
    11__亮
    12__亮
    13__亮
    14__亮
    15__亮
    16__暗
    17__亮
    18__亮
    19__亮
    20__亮
    21__亮
    22__亮
    23__亮
    24__亮
    25__暗
    26__亮
    27__亮
    28__亮
    29__亮
    30__亮
    31__亮
    32__亮
    33__亮
    34__亮
    35__亮
    36__暗
    37__亮
    38__亮
    39__亮
    40__亮
    41__亮
    42__亮
    43__亮
    44__亮
    45__亮
    46__亮
    47__亮
    48__亮
    49__暗
    50__亮
    51__亮
    52__亮
    53__亮
    54__亮
    55__亮
    56__亮
    57__亮
    58__亮
    59__亮
    60__亮
    61__亮
    62__亮
    63__亮
    64__暗
    65__亮
    66__亮
    67__亮
    68__亮
    69__亮
    70__亮
    71__亮
    72__亮
    73__亮
    74__亮
    75__亮
    76__亮
    77__亮
    78__亮
    79__亮
    80__亮
    81__暗
    82__亮
    83__亮
    84__亮
    85__亮
    86__亮
    87__亮
    88__亮
    89__亮
    90__亮
    91__亮
    92__亮
    93__亮
    94__亮
    95__亮
    96__亮
    97__亮
    98__亮
    99__亮
    100__暗
    
    

    跑出来的结果是,1,4,9,25,36,49,64,81,100是暗的。那么它们必定被操作了奇数次。


    稍微观察一下,也能看到这些数字有一个很显然的特点:都是完全平方数。

    为什么会这样呢?

    • 回到原来,每个编号的灯被操作的次数,等于它在1~100中拥有的因数个数。
    • 那么就会得出一个结论,完全平方数有奇数个约数。
    //为什么完全平方数有奇数个约数?
    以100为例:
    1×100=100
    2*50=100
    4*25=100
    5*20=100
    10*10=100
    /*
    100的所有约数如上所示,
    显然在10×10=100之前,两个乘数都是100的约数,是偶数个
    ,但10只能算一个,所以完全平方数必定有奇数个约数,
    对应的,非完全平方数一定有偶数个约数。
    */
    

    数学结论:

    完全平方数必定有奇数个约数,
    非完全平方数一定有偶数个约数。

    那么最开始的问题,就变成了找完全平方数的问题,一下子跳过了所有的逻辑和步骤,是完全超越了运算效率,直达结果的进步。这是一个显然的,数学水平影响编程效率的实例。

    这个结论可以有很多拓展,以后一旦遇到存在编号,并且与奇数和偶数相关的都可以进行大幅度的简化和跳跃,是对编程效率的巨大提升。

  • 相关阅读:
    强连通分量填坑记
    Car的旅行路线
    油滴扩散
    【转】孔乙已
    [CQOI2007]余数求和
    树形dp入门两题
    一本通 3.1 例 1」黑暗城堡
    一点点有的没的和一年总结
    leetcode答案 有效的括号(python)
    leetcode数据库题目及答案汇总
  • 原文地址:https://www.cnblogs.com/thinfog/p/10968791.html
Copyright © 2011-2022 走看看