算法竞赛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);
            }
        }
    }
}

 

    算法题后续会持续更新,由浅入深,慢慢理解!

 

如果大家喜欢我的文章,可以关注我的微信公众号,后面会陆续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值