算法研究之开灯问题

来源:互联网 发布:域名备案地点查询 编辑:程序博客网 时间:2024/05/24 05:04
/*
 * 有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;
}
}
}
}
0 0
原创粉丝点击