java程序实现一个面试题目 问:房间里100盏灯排成一列,序号为1到100,最初关着的。走进来n个人(n<10),每个人手里一张卡片,每张卡片上一个数字(小于30,由键盘输入),他们把序号为自己卡片上的数的倍数的等的开关各拉一下,问最后有那些灯是亮着的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 98F:\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 63 67 69 71 73 74 77 78 79 81 82 83 86 87 89 91 93 94 97 98 99F:\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 46 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 99F:\java>java Lamp[28, 12, 12, 17, 6, 18, 5, 17, 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]=!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 98F:\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 67 68 69 70 71 73 77 78 79 80 81 83 84 87 88 89 92 93 95 97 98 99 100F:\java> 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); }} 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+" "); } 恩 反正大于30的素数是不会亮的 其它的亮不亮 就要看你手上的那些卡片是什么数了我认为是编写一个大小为100的boolean数组 b 每一个代表一盏灯的开关 然后写一个方法private void tOrF(int n) { if(b[n]) b[n]=false; else b[n]=true; }然后进去一个人 先计算他手上的数字 看看有多少个开关要拉 然后再每次调用一下tOrF等10个人都进去后 再输出b的值就行了 第一,建一个class,负责验证和输入的。放入一个数组里或arraylist里。第二,利用递归方法计算序号为自己卡片上的数的倍数,,在100个数中的链表里进行匹配,应该打印俩行,一份是关的,一份是开的。 分享:解决后台接受前台中文信息乱码的问题 java集合怎么移除? Java 程序如何实现判断远程计算机snmp端口是否开放 java netbeans的桌面程序怎么做出来类似qq游戏里扑克牌的界面效果 applet的问题。 输入输出流的概念~ 一个简单的用于http服务器的线程池的例子 关于颜色的问题 一个数据结构有关的难题,爱好者高手请进! 怎样才能运行java 程序 如何从request中取得servletcontext? 关于一个线程的问题!!!!
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]
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>
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);
}
}
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+" ");
}
我认为是编写一个大小为100的boolean数组 b 每一个代表一盏灯的开关
然后写一个方法private void tOrF(int n) {
if(b[n]) b[n]=false;
else b[n]=true;
}
然后进去一个人 先计算他手上的数字 看看有多少个开关要拉 然后再每次调用一下tOrF
等10个人都进去后 再输出b的值就行了
第一,建一个class,负责验证和输入的。放入一个数组里或arraylist里。
第二,利用递归方法计算序号为自己卡片上的数的倍数,,在100个数中的链表里进行匹配,
应该打印俩行,一份是关的,一份是开的。