算法研究之开灯问题

这个问题是比较入门的一个算法问题:题目和解答如下

/*
 * 有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;
			}
		}
	}
}


上一篇:S3 存储附件和图片无法上传


下一篇:【算法导论】八皇后问题的算法实现(C、MATLAB、Python版)