算法研究之开灯问题

来源:互联网 发布:李沁 田小娥 知乎 编辑:程序博客网 时间:2024/06/07 18:31

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

/* * 有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 stubLight 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];}}}//结果赋值给resultfor (int i=0;i<n;i++) {if(a[i]==false){result[i]=0;}else {result[i]=1;}}}}


原创粉丝点击