计算灯的开关状态 java

7 篇文章 0 订阅

题目:有N 个灯放在一排,从1到N 依次顺序编号。有N 个人也从1 到N 依次编号。1号将灯全部关闭,2将凡是2 的倍数的灯打开;3 号将凡是3的倍数的灯作相反处理(该灯如为打开的, 则将它关闭;如关闭的,则将它打开)。以后的人都和3 号一样,将凡是自己编号倍数的灯作相反处理。试计算第N 个操作后,哪几盏灯是点亮的。(0-表示灯打开1-表示灯关闭)。

分析:题目还是蛮简单的,直接用一个boolean数组来保存灯的状态,初始化后遍历即可。

源代码:

import java.util.Scanner;
public class Main3 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();//读取灯的数目
        boolean[] a = new boolean[n+1];
        for(int i=1;i<=n;i++){//初始化灯的状态,false表示亮着,true代表关闭
            a[i] = false;
        }
        for(int i=2;i<=n;i++)
            for(int j=i;j<=n;j++){
                if(j%i==0){
                    a[j] = light(a[j]);
                }
            }
        for(int i=1;i<=n;i++){
            if(a[i] == false){
                System.out.print(i+" ");
            }
        }
    }
    public static boolean light(boolean l){
        if(true == l){
            return false;
        }else{
            return true;
        }
    }
}


在网上查了下资料,还有如下的思路,但我好像没理解,欢迎大家指点:

以N=200时为例,200以内平方根为正整数的都是这个题就是考察1~200每个数字的因子数的奇偶性.有奇数个因数的灯状态和初始状态相异,反之,因数是偶数个的,灯的状态不变.举两个例子:2号灯有1和2两个因数(2=1*2),所以开关两次,等状态不变;4号灯有1、2、4三个因数,(4=1*4=2*2)按三次,和初始状态不同,即一开始灯是灭着的,按完三次灯就亮了.最后1.4.9.16.25.36.49.64.81.100.121.144.169.196亮着

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值