算法竞赛001之开灯问题
问题简介: 有n盏灯编号为1-n,第一个人把所有灯打开,
第二个人按下是所有编号为2的倍数的开关.
(这些开关被关掉),
第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭)
依此类推,一共有k个人问最后有哪些开关开着 ?
输入:n和k,输出开着的灯的编号.k<=n<=1000
样例输入:7 3
样例输出: 1 5 6 7
package practice;
/**
* @author jins
* @date on 2019/1/11.
*/
import java.util.Scanner;
public class OpenLamp {
public static void main(String[] args)
{
// n表示共有n盏灯,k表示人数
int n,k,i,j;
//定义数组大小,并给所有的灯的默认值是0
//因为n和k都是从1开始,所以定的空间大了10个
//开着灯为1,关着灯为0
int [] number = new int[1010];
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
k = scanner.nextInt();
for (i=1;i<=n;i++)
{
for (j=1;j<=k;j++)
{
//判断灯编号为人数的倍数
if (i%j==0)
{
//如果灯是关着的,那么打开
if (number[i]==0)
{
number[i] = 1;
}else {
//如果灯是开着的,那么关闭
number[i] = 0;
}
}
}
}
for ( i = 1; i <= n ;i++ )
{
//判断如果灯开着,那么输出所在的灯的编号
if (number[i]==1)
{
System.out.print(" "+i);
}
}
}
}
算法题后续会持续更新,由浅入深,慢慢理解!
如果大家喜欢我的文章,可以关注我的微信公众号,后面会陆续更新!