博创华宇吧 关注:389贴子:5,536
  • 4回复贴,共1

编程题: 100间房和100个人关于关灯的问题

只看楼主收藏回复

屋子里有1到100号100盏关闭的灯,门外有1到100号100个人,每个人都要进屋一次,把与自己序号对应的和是自己序号倍数的灯绳拉一下,(比如1号要拉所有的灯绳,2号要拉2,4,6的灯绳,而100号只需拉100号灯绳)问:当100人都出来后,屋子里亮着的灯有几盏?


1楼2016-07-14 09:54回复
    package com.cnhonkerarmy.test;
    import java.util.ArrayList;
    import java.util.List;
    public class On_Off_Bulb {
    boolean bulbs[] = null;
    int peoples[] = null;
    public On_Off_Bulb(){
    init();
    }
    private void init(){
    bulbs = new boolean[100];
    peoples = new int[100];
    }
    public static void main(String[] args) {
    On_Off_Bulb oob = new On_Off_Bulb();
    for (int i = 0; i < oob.peoples.length; i++) {
    int peopleNumber = i + 1;
    Integer[] operateNumbers = getOperateNumbers(peopleNumber);
    oob.on_or_off(peopleNumber, operateNumbers);
    }
    System.out.println("最后亮着的灯的总数是: " + oob.getNumOfOnBulb());
    }
    public void on_or_off(int peopleNumber, Integer[] operateNumbers){
    System.out.println(peopleNumber + "号人员进入房间,对: " + arrayToStr(operateNumbers) + " 号灯进行操作");
    for(Integer operateNumber : operateNumbers){
    bulbs[operateNumber - 1] = !bulbs[operateNumber - 1];
    }
    }
    public static Integer[] getOperateNumbers(int peopleNumber){
    Integer operateNumbers[] = null;
    List<Integer> temp = new ArrayList<Integer>();
    if(peopleNumber <= 0 || peopleNumber > 100) return operateNumbers;
    for (int i = 1; i < 101; i++) {
    if(peopleNumber == i || i % peopleNumber == 0){
    temp.add(i);
    }
    }
    return temp.toArray(operateNumbers = new Integer[temp.size()]);
    }
    private int getNumOfOnBulb(){
    int count = 0;
    for (boolean b : this.bulbs) {
    if(b){
    count ++;
    }
    }
    return count;
    }
    public static String arrayToStr(Integer[] arry){
    StringBuffer sb = new StringBuffer();
    sb.append("[");
    for (Integer i : arry) {
    sb.append(i +",");
    }
    sb.append("]");
    return sb.toString().replaceAll(",]", "]");
    }
    }


    2楼2016-07-14 09:55
    回复
      运行结果:
      1号人员进入房间,对: [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] 号灯进行操作
      2号人员进入房间,对: [2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100] 号灯进行操作
      3号人员进入房间,对: [3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99] 号灯进行操作
      4号人员进入房间,对: [4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100] 号灯进行操作
      5号人员进入房间,对: [5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100] 号灯进行操作
      6号人员进入房间,对: [6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96] 号灯进行操作
      7号人员进入房间,对: [7,14,21,28,35,42,49,56,63,70,77,84,91,98] 号灯进行操作
      8号人员进入房间,对: [8,16,24,32,40,48,56,64,72,80,88,96] 号灯进行操作
      9号人员进入房间,对: [9,18,27,36,45,54,63,72,81,90,99] 号灯进行操作
      10号人员进入房间,对: [10,20,30,40,50,60,70,80,90,100] 号灯进行操作
      11号人员进入房间,对: [11,22,33,44,55,66,77,88,99] 号灯进行操作
      12号人员进入房间,对: [12,24,36,48,60,72,84,96] 号灯进行操作
      13号人员进入房间,对: [13,26,39,52,65,78,91] 号灯进行操作
      14号人员进入房间,对: [14,28,42,56,70,84,98] 号灯进行操作
      15号人员进入房间,对: [15,30,45,60,75,90] 号灯进行操作
      16号人员进入房间,对: [16,32,48,64,80,96] 号灯进行操作
      17号人员进入房间,对: [17,34,51,68,85] 号灯进行操作
      18号人员进入房间,对: [18,36,54,72,90] 号灯进行操作
      19号人员进入房间,对: [19,38,57,76,95] 号灯进行操作
      20号人员进入房间,对: [20,40,60,80,100] 号灯进行操作
      21号人员进入房间,对: [21,42,63,84] 号灯进行操作
      22号人员进入房间,对: [22,44,66,88] 号灯进行操作
      23号人员进入房间,对: [23,46,69,92] 号灯进行操作
      24号人员进入房间,对: [24,48,72,96] 号灯进行操作
      25号人员进入房间,对: [25,50,75,100] 号灯进行操作
      26号人员进入房间,对: [26,52,78] 号灯进行操作
      27号人员进入房间,对: [27,54,81] 号灯进行操作
      28号人员进入房间,对: [28,56,84] 号灯进行操作
      29号人员进入房间,对: [29,58,87] 号灯进行操作
      30号人员进入房间,对: [30,60,90] 号灯进行操作
      31号人员进入房间,对: [31,62,93] 号灯进行操作
      32号人员进入房间,对: [32,64,96] 号灯进行操作
      33号人员进入房间,对: [33,66,99] 号灯进行操作
      34号人员进入房间,对: [34,68] 号灯进行操作
      35号人员进入房间,对: [35,70] 号灯进行操作
      36号人员进入房间,对: [36,72] 号灯进行操作
      37号人员进入房间,对: [37,74] 号灯进行操作
      38号人员进入房间,对: [38,76] 号灯进行操作
      39号人员进入房间,对: [39,78] 号灯进行操作
      40号人员进入房间,对: [40,80] 号灯进行操作
      41号人员进入房间,对: [41,82] 号灯进行操作
      42号人员进入房间,对: [42,84] 号灯进行操作
      43号人员进入房间,对: [43,86] 号灯进行操作
      44号人员进入房间,对: [44,88] 号灯进行操作
      45号人员进入房间,对: [45,90] 号灯进行操作
      46号人员进入房间,对: [46,92] 号灯进行操作
      47号人员进入房间,对: [47,94] 号灯进行操作
      48号人员进入房间,对: [48,96] 号灯进行操作
      49号人员进入房间,对: [49,98] 号灯进行操作
      50号人员进入房间,对: [50,100] 号灯进行操作
      51号人员进入房间,对: [51] 号灯进行操作
      52号人员进入房间,对: [52] 号灯进行操作
      53号人员进入房间,对: [53] 号灯进行操作
      54号人员进入房间,对: [54] 号灯进行操作
      55号人员进入房间,对: [55] 号灯进行操作
      56号人员进入房间,对: [56] 号灯进行操作
      57号人员进入房间,对: [57] 号灯进行操作
      58号人员进入房间,对: [58] 号灯进行操作
      59号人员进入房间,对: [59] 号灯进行操作
      60号人员进入房间,对: [60] 号灯进行操作
      61号人员进入房间,对: [61] 号灯进行操作
      62号人员进入房间,对: [62] 号灯进行操作
      63号人员进入房间,对: [63] 号灯进行操作
      64号人员进入房间,对: [64] 号灯进行操作
      65号人员进入房间,对: [65] 号灯进行操作
      66号人员进入房间,对: [66] 号灯进行操作
      67号人员进入房间,对: [67] 号灯进行操作
      68号人员进入房间,对: [68] 号灯进行操作
      69号人员进入房间,对: [69] 号灯进行操作
      70号人员进入房间,对: [70] 号灯进行操作
      71号人员进入房间,对: [71] 号灯进行操作
      72号人员进入房间,对: [72] 号灯进行操作
      73号人员进入房间,对: [73] 号灯进行操作
      74号人员进入房间,对: [74] 号灯进行操作
      75号人员进入房间,对: [75] 号灯进行操作
      76号人员进入房间,对: [76] 号灯进行操作
      77号人员进入房间,对: [77] 号灯进行操作
      78号人员进入房间,对: [78] 号灯进行操作
      79号人员进入房间,对: [79] 号灯进行操作
      80号人员进入房间,对: [80] 号灯进行操作
      81号人员进入房间,对: [81] 号灯进行操作
      82号人员进入房间,对: [82] 号灯进行操作
      83号人员进入房间,对: [83] 号灯进行操作
      84号人员进入房间,对: [84] 号灯进行操作
      85号人员进入房间,对: [85] 号灯进行操作
      86号人员进入房间,对: [86] 号灯进行操作
      87号人员进入房间,对: [87] 号灯进行操作
      88号人员进入房间,对: [88] 号灯进行操作
      89号人员进入房间,对: [89] 号灯进行操作
      90号人员进入房间,对: [90] 号灯进行操作
      91号人员进入房间,对: [91] 号灯进行操作
      92号人员进入房间,对: [92] 号灯进行操作
      93号人员进入房间,对: [93] 号灯进行操作
      94号人员进入房间,对: [94] 号灯进行操作
      95号人员进入房间,对: [95] 号灯进行操作
      96号人员进入房间,对: [96] 号灯进行操作
      97号人员进入房间,对: [97] 号灯进行操作
      98号人员进入房间,对: [98] 号灯进行操作
      99号人员进入房间,对: [99] 号灯进行操作
      100号人员进入房间,对: [100] 号灯进行操作
      最后亮着的灯的总数是: 10


      3楼2016-07-14 09:55
      收起回复
        还亮着的灯必然是被拉了奇数次,所以它的序号有奇数个因子,所以它是完全平方数。1到100共有10个完全平方数,所以还有10个灯是亮着的


        4楼2016-07-14 09:55
        回复