带锁的门

简介: 算法题

题目

在走廊上有n个带锁的门,从1到n依次编号。最初所有门都是关闭状态,我们从门前经过n次,但是,每次从一号门开始,在第i次经过时(i=1,2,3,...n)改变i 的整数倍号锁的状态,门为开,关上,门要是关着,打开它。完成最后一次经过后,哪些门是开的,那些又是关上的呢??

解题

这题还是比较简单的,仔细看一下题目,注意 ==改变i的整数倍号锁的状态==,==我们可以找1-n这些数他们分别的因子个数,假如其因子个数恰好是偶数,门最后的状态还是关上的,但是要是其是奇数,那它会变成打开的==,关键就是在于因子个数。但是从数学角度来看,因子一般是从对出现,好比,6的因子是1和6,2和3,10的因子是1和10,2和5;但是,9的因子却没有成对出现,1和9,3,3的平方就是9了,所以找因子个数也不重要啦,找平方数,平方数到最后一定会是打开的状态。找到1到n中的平方数即可。

代码分块

输入门的总数,建立门状态数组,统计被打开门的数量

 Scanner sc = new Scanner(System.in);
        //获取总数
        System.out.println("请输入门的总数");
        int n = sc.nextInt();
        //统计门被打开的个数
        int number = 0;


        //使用下标,从0开始计数,可能要取到n
        int[] close = new int[n+1];

遍历,找1-n中的平方数

    for (int i = 0; i < n; i++) {
   
            int j = i + 1;
            if (j*j <= n){
   
                //1为开,0为关
                close[(int) Math.pow(j,2)]++;
            }
        }

源代码

package com.Chapter_1;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/19 12:33
 */

public class Unlock_Door {
   

    /**
     * 将门牌号分解成i*j的形式,判断会改变多少次状态,奇数次会使门开放
     */

    public static void main(String[] args) {
   
        Scanner sc = new Scanner(System.in);
        //获取总数
        System.out.println("请输入门的总数");
        int n = sc.nextInt();
        //统计门被打开的个数
        int number = 0;


        //使用下标,从0开始计数,可能要取到n
        int[] close = new int[n+1];

        for (int i = 0; i < n; i++) {
   
            int j = i + 1;
            if (j*j <= n){
   
                //1为开,0为关
                close[(int) Math.pow(j,2)]++;
            }
        }

        System.out.println("打开门的编号:");

        for (int i = 1; i <= n; i++) {
   
            if (close[i] == 1){
   
                System.out.print(i + " ");
                number++;
            }
        }
        System.out.println("\n关门的编号");

        for (int i = 1; i <= n; i++) {
   
            if (close[i] != 1){
   
                System.out.print(i + " ");
            }
        }
        System.out.println("\n打开门的数量:" + number);
    }
}
目录
相关文章
|
API 数据库
Activiti 流程资源文件下载及历史信息查询
Activiti 流程资源文件下载及历史信息查询
188 0
|
4月前
|
存储 人工智能 JavaScript
小米AI眼镜是值不值得买,看完就知道
2025年6月26日,小米正式发布首款AI眼镜,售价1999元起。搭载高通AR1芯片与恒玄2700,配备1200万摄像头、5麦克风阵列,支持录音转写、同声传译、卡路里识别等功能。可选电致变色镜片,双指轻划0.2秒变色。4GB+32GB存储组合,续航约50分钟。外观致敬Meta RayBan,经典百搭。虽定价略高,但功能丰富,适合有智能穿戴需求的用户。
|
26天前
|
人工智能 SEO
智能体最新消息:从技术爆点到产业浪潮,三大趋势透视下一代人机协作范式
2024年AI智能体爆发,正重塑商业与职业格局。三大趋势凸显:智能体从工具升为战略核心,驱动企业模式创新;能力平民化催生“智能体操盘手”新职业;政策与资本共推教育生态成型。智能体已成工作新常态,时代变革亟待主动拥抱。
|
3月前
|
人工智能 供应链 数据可视化
工作流梳理工具实战教程:手把手教你绘制第一张自动化流程图
本文剖析了团队因流程混乱导致重复劳动和效率低下的问题,提出通过工作流梳理提升协作效率的解决方案。总结了流程梳理的六大核心需求,并深度测评了6款主流工具,国内有板栗看板那,国外有kiss flow结合团队规模与需求提供选型建议,助力企业高效落地流程优化。
|
5月前
|
Ubuntu 数据库
解决Ubuntu系统获取锁失败的问题
不过记住,这种方式有如凤凰涅槃,万不得已时才使用。这样,繁琐的锁定问题就被巧妙解决了。从此,当你再次面对这类状况时,就能秉持锁匠之智,轻松应对。
187 23
|
4月前
|
API 数据安全/隐私保护
手机一键导出微信群成员名单工具,微信群WXID微信号导出软件,批量导出群成员工具
这段代码使用了itchat库,这是一个基于网页版微信API的第三方库。请注意实际使用时需要扫描二维码登录
|
消息中间件 数据采集 监控
高级应用:利用DataHub构建实时数据流处理系统
【10月更文挑战第23天】在大数据时代,实时数据处理的需求日益增长。无论是金融交易、物联网设备监控,还是社交媒体分析,实时数据流处理系统都扮演着至关重要的角色。作为阿里云提供的实时数据同步服务,DataHub为开发者提供了一种高效、可靠的方式来构建实时数据流处理系统。本文将从个人的角度出发,探讨如何利用DataHub构建实时数据流处理系统,包括配置实时数据采集、与流处理引擎集成、实施数据流的实时分析和处理,以及确保系统的高可用性和扩展性。
555 5
|
8月前
|
运维 Kubernetes 调度
《探秘Kubernetes核心:Pod设计理念与调度基石》
Kubernetes作为容器编排领域的事实标准,其核心调度单元Pod在应用运行与管理中占据重要地位。Pod通过封装紧密协作的容器,实现资源共享与生命周期统一管理,贴近应用本质并简化部署运维。作为资源分配与隔离的最佳粒度,Pod适应复杂应用架构,支持弹性伸缩,提升系统性能与可靠性。其设计理念推动了容器编排技术发展,促进了云原生应用普及,对云计算领域影响深远。
219 11
|
10月前
|
存储 消息中间件 小程序
转转平台IM系统架构设计与实践(一):整体架构设计
本文描述了转转IM为整个平台提供的支撑能力,给出了系统的整体架构设计,分析了系统架构的特性。
297 10
|
10月前
|
人工智能 开发者 C++
通义灵码流式补全性能优化场景DEMO
通义灵码流式补全性能优化DEMO展示了在处理大段代码时的高效展示方案。通过在VS Code中实现流式补全,模型可在500毫秒内开始展示代码,首包返回后逐行流式输出,大大减少了开发者的等待时间,提升了coding流畅度,让AI更好地适应开发者需求。
194 0