问:房间里100盏灯排成一列,序号为1到100,最初关着的。走进来n个人(n<10),每个人手里一张卡片,每张卡片上一个数字(小于30,由键盘输入),他们把序号为自己卡片上的数的倍数的等的开关各拉一下,问最后有那些灯是亮着的?

解决方案 »

  1.   

    import java.util.*; public class Lamp{ 
    public static void main(String[] args) { 
    Random rand=new Random();
    int[] cards=new int[rand.nextInt(10)];
    boolean[] isTurnOff=new boolean[101]; //0 不用。

    for(int i=0;i<cards.length;i++){
    cards[i]=rand.nextInt(30);
    }
    for(int i=0;i<cards.length;i++){
    if(cards[i]!=0){
    for(int j=cards[i];j<101;j+=cards[i]){
    isTurnOff[j]=true;
    }
    }
    }
    System.out.println(Arrays.toString(cards));

    for(int i=1;i<101;i++){
    if(!isTurnOff[i]){
    System.out.print(i+" ");
    }
    }
    }} F:\java>java Lamp
    [17, 3, 27, 4, 20, 18]
    1 2 5 7 10 11 13 14 19 22 23 25 26 29 31 35 37 38 41 43 46 47 49 50 53 55 58 59 61 62 65 67 70 71 73
     74 77 79 82 83 86 89 91 94 95 97 98
    F:\java>java Lamp
    [4, 20, 5, 22, 8, 18]
    1 2 3 6 7 9 11 13 14 17 19 21 23 26 27 29 31 33 34 37 38 39 41 42 43 46 47 49 51 53 57 58 59 61 62 6
    3 67 69 71 73 74 77 78 79 81 82 83 86 87 89 91 93 94 97 98 99
    F:\java>java Lamp
    [27, 13, 27, 20, 19, 20, 13, 25]
    1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 17 18 21 22 23 24 28 29 30 31 32 33 34 35 36 37 41 42 43 44 45 4
    6 47 48 49 51 53 55 56 58 59 61 62 63 64 66 67 68 69 70 71 72 73 74 77 79 82 83 84 85 86 87 88 89 90
     92 93 94 96 97 98 99
    F:\java>java Lamp
    [28, 12, 12, 17, 6, 18, 5, 17, 1]
      

  2.   

    没有看清题:
    import java.util.*; public class Lamp{ 
        public static void main(String[] args) { 
            Random rand=new Random();
            int[] cards=new int[rand.nextInt(10)];
            boolean[] isTurnOff=new boolean[101]; //0 不用。
            
            for(int i=0;i<cards.length;i++){
                cards[i]=rand.nextInt(30);
            }
            for(int i=0;i<cards.length;i++){
                if(cards[i]!=0){
                    for(int j=cards[i];j<101;j+=cards[i]){
                        isTurnOff[j]=!isTurnOff[j];       //原来是isTurnOff[j]=trur.我本拉登都没有弄清。
                    }
                }
            }
            System.out.println(Arrays.toString(cards));
            
            for(int i=1;i<101;i++){
                if(!isTurnOff[i]){
                    System.out.print(i+" ");
                }
            }
        }}F:\java>java Lamp
    [1, 14, 12, 8, 8, 16, 15, 12]
    14 15 16 28 30 32 42 45 48 56 60 64 70 75 80 84 90 96 98
    F:\java>java Lamp
    [10, 2, 19, 4, 12, 13, 5, 14]
    1 3 4 7 8 9 11 14 16 17 20 21 23 26 27 29 31 32 33 37 38 40 41 42 43 44 47 49 51 53 59 61 63 64 65 6
    7 68 69 70 71 73 77 78 79 80 81 83 84 87 88 89 92 93 95 97 98 99 100
    F:\java>
      

  3.   


    import java.util.*;public class LianXi { public static void main(String[] args) {

    Map m = new HashMap();//存放100盏灯和对应的次数
    List l = new ArrayList();//存放被拉亮的灯,最后打印
    for(int i =1;i <= 100; i++){
    m.put(i, 0);
    }
    int[] a = {3,8,23,11,54,12}; //表示进入6个人

    for(int j = 0;j < a.length; j++){
    for(int k = 1;k <= 100/a[j]; k++){
    m.put(a[j]*k,(Integer.valueOf(m.get(a[j]*k).toString())).intValue()+1);
    }
    }

    for(int i = 1;i <= 100;i++){
    int value = Integer.valueOf(m.get(i).toString());
    // System.out.print("第"+i+"盏灯被拉次数为: "+value);
    if(value%2 != 0){
    // System.out.print("被拉次数为奇数,所有为亮着的");
    l.add(i);
    }
    // System.out.println();
    }
    System.out.println("开着的灯有"+l);
    }
    }
      

  4.   

    int []ka=new int[]{2,3,5,8,10,15,20};
    boolean []deng=new boolean[100];
    for(int i:ka){
    for(int j=0;j<deng.length;j++){
    if((j+1)%i==0){
    if(deng[j])
    deng[j]=false;
    else
    deng[j]=true;
    }
    }
    }
    for(int i=0;i<deng.length;i++){
    if(deng[i])
    System.out.print(i+1+" ");
    }
      

  5.   

    恩 反正大于30的素数是不会亮的 其它的亮不亮 就要看你手上的那些卡片是什么数了
    我认为是编写一个大小为100的boolean数组 b 每一个代表一盏灯的开关 
    然后写一个方法private void tOrF(int n) {
                   if(b[n]) b[n]=false;
                      else b[n]=true;
                 }
    然后进去一个人  先计算他手上的数字 看看有多少个开关要拉 然后再每次调用一下tOrF
    等10个人都进去后 再输出b的值就行了
      

  6.   


    第一,建一个class,负责验证和输入的。放入一个数组里或arraylist里。
    第二,利用递归方法计算序号为自己卡片上的数的倍数,,在100个数中的链表里进行匹配,
    应该打印俩行,一份是关的,一份是开的。