带锁的门

简介: 算法题

题目

在走廊上有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);
    }
}
目录
相关文章
|
存储 芯片
基本逻辑电路的介绍
基本逻辑电路:从门电路到集成电路 逻辑电路是数字电路中的一种,它用于处理和操作数字信号。逻辑电路可以根据输入信号的不同组合,产生不同的输出信号。在数字系统中,逻辑电路扮演着重要的角色,它们可以实现计算、控制、存储等功能。本文将介绍逻辑电路的基本原理和发展历程。 一、门电路:逻辑电路的基础 门电路是逻辑电路的基础,它是由逻辑门电路组成的。逻辑门电路是一种基本的数字电路元件,它可以实现与门、或门、非门等逻辑运算。门电路的输入和输出都是数字信号,它们通过逻辑门电路的布尔运算产生不同的输出信号。门电路可以根据不同的逻辑运算实现不同的功能,如逻辑运算、比较运算、计数运算等。 二、组合逻辑电路:多
175 0
|
芯片
译码器的介绍
译码器是一种常见的数字电路元件,它用于将输入的编码信号转换为输出的解码信号。在数字系统中,译码器起着非常重要的作用,它能够将编码的数字信号转换为可识别的输出信号,实现数字信号的解码和解析。本文将介绍译码器的原理、分类、应用以及未来的发展趋势。 一、译码器的原理 译码器的原理是基于布尔逻辑运算的。它根据输入的编码信号,通过内部的逻辑门电路进行运算,最终输出对应的解码信号。译码器的输入可以是二进制编码、BCD编码或格雷码等形式,输出可以是十进制数、BCD数或具体的控制信号等。 译码器的内部结构通常由多个逻辑门电路组成,例如AND门、OR门和NOT门等。通过这些逻辑门的组合,译码器可以实现各种不
465 0
基础运放电路专题
基础运放电路是电子电路中最基础和最常用的电路之一。基础运放电路使用运放(Operational Amplifier,简称Op Amp)作为核心元件,可以实现放大、滤波、积分、微分、比较等多种功能。以下是基础运放电路的专题介绍。 1. 运放的基本概念: 运放是一种高增益、高输入阻抗、低输出阻抗的电子放大器,通常由多个晶体管和电阻等元件组成。运放有两个输入端(正输入端和负输入端)和一个输出端,可以将输入信号放大到输出端并输出。 2. 基础运放电路的分类: 基础运放电路主要包括反馈电路、比较电路、积分电路和微分电路等。其中,反馈电路是最常见的基础运放电路,可以实现放大、滤波、振荡等多种功能。
113 0
|
7月前
|
算法
数字逻辑与模拟电子技术-部分知识点(2)——模电部分-半导体三极管、基本线性运放电路、正弦波振荡电路
数字逻辑与模拟电子技术-部分知识点(2)——模电部分-半导体三极管、基本线性运放电路、正弦波振荡电路
65 0
数电模电(一) 逻辑门及其应用 实验
数电模电(一) 逻辑门及其应用 实验
|
8月前
调用门
调用门
59 0
|
8月前
硬件设计中与门、或门、非门电路详解
硬件设计中与门、或门、非门电路详解
2328 0
与门、或门、非门、与非门、或非门、异或门、同或门
与门、或门、非门、与非门、或非门、异或门、同或门
|
算法
【一文搞懂】—带霍尔编码器的直流有刷减速电机
本文详细介绍了直流有刷电机的工作原理,为什么要有减速电机,减速比是什么,什么是编码器,编码器的作用。针对霍尔编码器介绍了一些相关概念以及检测电机转速和转向的原理。最后,给出了详细的测速程序设计思路和代码实现。
740 0
|
存储
门电路
门电路是数字电路中最基本的组成单元之一,它由一组逻辑门组成,用于实现布尔逻辑运算。门电路可以根据输入信号的不同组合产生不同的输出信号,从而实现各种逻辑功能。本文将介绍门电路的基本原理、常见类型以及应用场景。 一、门电路的基本原理 门电路的基本原理是根据布尔代数的逻辑运算规则,将输入信号进行逻辑运算,然后输出结果。门电路通常由多个逻辑门组成,每个逻辑门都有一个或多个输入端和一个输出端。逻辑门根据输入信号的不同组合,产生不同的输出信号。常见的逻辑门有与门、或门、非门、异或门等。 与门是最基本的逻辑门之一,它的输出信号只有在所有输入信号都为1时才为1,否则为0。或门是另一种常见的逻辑
170 0