带锁的门

简介: 算法题

题目

在走廊上有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);
    }
}
目录
相关文章
|
2天前
调用门
调用门
21 0
|
10月前
数电模电(一) 逻辑门及其应用 实验
数电模电(一) 逻辑门及其应用 实验
|
10月前
电子系统设计——微弱信号测量电路之小学期总结
电子系统设计——微弱信号测量电路之小学期总结
|
2天前
硬件设计中与门、或门、非门电路详解
硬件设计中与门、或门、非门电路详解
103 0
与门、或门、非门、与非门、或非门、异或门、同或门
与门、或门、非门、与非门、或非门、异或门、同或门
|
8月前
|
芯片
电子技术中关于TTL电平,CMOS电平,OC门,OD门的基础知识
电子技术中关于TTL电平,CMOS电平,OC门,OD门的基础知识
101 0
|
量子技术
量子态操作:基于门的三态旋转
量子态操作:基于门的三态旋转
141 0
数字逻辑电路实验:基本电子钟
数字逻辑电路实验:基本电子钟
83 0
数字逻辑电路设计实验:七段数码管译码器
数字逻辑电路设计实验:七段数码管译码器
93 0
|
芯片
数电实验一 逻辑门参数测试
数电实验一 逻辑门参数测试
91 0
数电实验一 逻辑门参数测试