【算法----->Locker Doors】

该博客探讨了一个关于锁柜开关门问题的算法实现,通过Java编程语言进行演示。问题描述为:从1到n编号的锁柜,每次从第1个开始按顺序操作每个锁柜,如果门是关闭的则打开,反之则关闭。经过n次操作后,哪些门会保持开启状态?程序通过计算输入数值n的平方根并输出结果来确定开启的门的数量。例如,当n=4时,最后会有2个门是开着的。该问题的关键在于理解每扇门的状态变化与它的编号的因数数量有关。
摘要由CSDN通过智能技术生成

题目

There are n lockers in a hallway numbered sequentially from 1 to n. Initially, all the locker doors are closed. You make n passes by the lockers, each time starting with locker #1. On the ith pass, i = 1, 2, …, n, you toggle the door of every ith locker: if the door is closed, you open it, if it is open, you close it. For example, after the first pass every door is open; on the second pass you only toggle the even-numbered lockers (#2, #4, …) so that after the second pass the even doors are closed and the odd ones are opened; the third time through you close the door of locker #3 (opened from the first pass), open the door of locker #6 (closed from the second pass), and so on. After the last pass, which locker doors are open and which are closed? How many of them are open? Your task is write a program to output How many doors are open after the last pass? Assumptions all doors are closed at first.

输入

a positive numbers n, total doors. n<=100000

输出

a positive numbers ,the total of doors opened after the last pass.

代码实现(Java)

public class LockerDooor {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int sqrt = (int) Math.sqrt(n);
        System.out.println(sqrt);
    }
}

例子

输入:4

第一次:1 1 1 1

第二次:1 0 1 0

第三次:1 0 0 0

第四次:1 0 0 1

此时输出:2

输入:9

最开始: 0 0 0 0 0 0 0 0 0

第一次:1 1 1 1 1 1 1 1 1

第二次:1 0 1 0 1 0 1 0 1

第三次:1 0 0 0 1 1 1 0 0

第四次:1 0 0 1 1 1 1 1 0

第五次:1 0 0 1 0 1 1 1 0

第六次:1 0 0 1 0 0 1 1 0

第七次:1 0 0 1 0 0 0 1 0

第八次:1 0 0 1 0 0 0 0 0

第九次:1 0 0 1 0 0 0 0 1

输出:3
总结:找规律得出输出值=输入值的平方根整数(不太清楚的可以多写点输入的值)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值