华为机试题【12】-关灯泡

题目描述:

描述:

一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。

有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。

注:电灯数和学生数一致。

运行时间限制: 无限制

内存限制: 无限制

输入:

电灯的数量

输出:

亮着的电灯数量

样例输入:

3

样例输出:

1

思路分析:

  • 对于这道题题目时间和空间没有要求,按照机试的思路,是按要求完成,我选择暴力破解
  • 采用boolean数组的结构,依次遍历1~n,进行开关灯的操作,最后统计数组为true的数目

代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int number = 0;
    Scanner scan = new Scanner(System.in);
    while(scan.hasNext()){
        int n = scan.nextInt();
        if(n < 1){
            return;
        }
        boolean[] light = new boolean[n];
        for(int i = 0;i < n;i++){
            light[i] = false;
        }
        for(int a = 1; a <= n;a++){
            int temp = a;
            while(temp <= n){
                light[temp-1] = !light[temp-1];
                temp = temp +a;
            }
        }
        for(int b = 0;b < n;b++){
            if(light[b]){
                number++;
            }
        }
        System.out.println(number);
    }   

    }
}

我的微信二维码如下,欢迎交流讨论

欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!

微信订阅号二维码如下:

时间: 2024-10-11 05:48:02

华为机试题【12】-关灯泡的相关文章

2017华为机试题--水仙花数

等了一个月终于等到华为给安排的实习生在线机试,把自己做的三道题记录了一下,也方便日后复习.这篇是第一题,没有什么特别的难度,经典的水仙花数题. 题目描述:水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身.(例如:13+53+33=153),要求:输出1000范围内所有水仙花数及水仙花数之和. 输入描述:无 输出描述:1000以内所有水仙花数及总和. 输出例子: 第1个水仙花数:xxx 第2个水仙花数:xxx 第3个水仙花数:xxx ... 水仙花数总和为:xxx 1 p

华为机试题3

[编程题] 明明的随机数 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数 字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.请你协助明明完成 “去重”与“排序”的工作. Input Param n               输入随机数的个数 inputArray      n个随机整数组成的数组 Return Value

华为机试题【10】-求数字基root

题目描述: 求整数的Root:给定正整数,求每位数字之和;如果和不是一位数,则重复; 输入:输入任意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行对应一个输入数据的结果. 样例输入: 25 865 样例输出: 7 1 思路分析: 首先求个位数相加,经典方法,求余相除 要求各个位数的和是小于10,可以采用递归或者循环 代码: import java.util.Scanner; public class Main { static int[] num

华为机试题 二叉查搜索树 判断两序列是否为同一二叉搜索树序列

描述: 判断两序列是否为同一二叉搜索树序列 输入 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树. 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树. 输出: 如果序列相同则输出YES,否则输出NO 样例输入: 2 567432 543267 576342 0 样例输出: YES NO 本题思路:根

求一个int型整数的两种递减数之和(java)--2015华为机试题

题目描述: 给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数:2.递减数中各位数之和最大的数)之和. 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同的情况. 最大递减数:所输入整数的所有递减数中值最大的一个. 如: 75345323,递减数有:75,753,53,53,532,32.那么最大的递减数为753. 各位数字之和最大的递减数: 如75345323中的各递减数:75各位数之和=12(7+5=12),753各位数之和=15(7

华为机试题 坐标移动

题目描述 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动.从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面. 输入: 合法坐标为A(或者D或者W或者S) + 数字(两位以内) 坐标之间以;分隔. 非法坐标点需要进行丢弃.如AA10;  A1A;  $%$;  YAD; 等. 下面是一个简单的例子 如: A10;S20;W10;D30;X;A1A;B10A11;;A10; 处理过程: 起点(0,0) +   A10  

华为机试题【11】-报数删除人

题目描述: 有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出,问最后留下的那位是原来第几号. 思路分析: 首先是选好数据结构,轻量级的boolean数组,下边代表序号,全部初始化位true 退出变为false,设置全局变量int a,遍历数组,a++(当对应为false时候,continue跳过) 遍历数组统计true的数量,为1时候退出 注意: 如果要用List来存储,注意遍历remove删除时候,要一致,不能list和iterator混用 代码: import

华为机试题【3】

题目: 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张.牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):) 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER 请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR 基

2017华为机试题--投骰子问题

题目描述:骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置到平面上,可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次),可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向右翻转1次),可以逆时针旋转(用A表示逆时针旋转90度),可以顺时针旋转(用C表示逆时针旋转90度),现从初始状态开始,根据输入的动作序列,计算得到最终的状态. 输入描述: 初始状态为:123456 输入只包含LRFBA