这个问题是比较入门的一个算法问题:题目和解答如下
/* * 有n 盏灯,编号为l-n. 第1 个人把所有灯打开,第2 个人按下所编号为2 的倍数 的开关〈这些灯将关掉) , 第3 个人接下所有辑号为3 的情数的开关〈其*掉的灯将 披打开,开着的灯将关闭) ,依此类推.一共有k 个人,间最后有哪些灯开着? */ public class Light { //boolen临时数组 public boolean[] a; //结果数组 public int[] result; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Light light=new Light(); light.sweepLight(100, 20); int[] t=light.result; for(int i=0;i<t.length;i++){ if(t[i]==1){ System.out.println("第"+(i+1)+"号灯亮着!"); } } } /* * n 灯的个数 k 人的数量 */ public void sweepLight(int n,int k){ a=new boolean[n]; result=new int[n]; /* * 初始化a */ for(int m=0;m<n;m++){ a[m]=false; } for(int i=0;i<k;i++){ for(int j=0;j<n;j++){ if((j+1)%(i+1)==0){ a[j]=!a[j]; } } } //结果赋值给result for (int i=0;i<n;i++) { if(a[i]==false){ result[i]=0; }else { result[i]=1; } } } }