zoukankan      html  css  js  c++  java
  • 0081-开关灯

    题目

    开关灯
    难度级别:A; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B
    试题描述

    礼堂有n盏灯(n<=5000),从1到n按顺序对灯进行编号,初始时全部处于开启状态;有m个人(m<=1000)也从1到m依次编号。

    第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做了相反处理(即打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将自己编号倍数的灯做相反处理。

    经过m个人操作最后有多少灯是开着的?输出开着灯的个数。

    输入
    一行两个整数n和m
    输出
    输出开着的灯的数量。
    输入示例
    4 3
    输出示例
    3

    分析

      此题仔细分析便能发现只要能用两层循环一层循环人数,一层循环灯数,再判断是否整除就行了。

      同时,直接通过bool类型数组(开启为1,关闭为0)可以很清晰地存储灯的状态。想要实现开的关,关的开,直接用1减去当前灯的状态就行了(开启为1,1-1=0,关闭为0,1-0=1)。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    bool a[5005];
    int n,m,ans;
    int main()
    {
    	scanf("%d%d",&n,&m);
    	memset(a,1,sizeof(a));//初始时全部处于开启状态
    	for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) if(!(j%i))/*按照题目要求打开或关闭对应的灯。*/ a[j]=1-a[j];//用1减去当前的数,就能够实现打开的关闭,关闭的打开。
    	for(int i=1;i<=n;i++) if(a[i]) ans++;//统计开着的灯。
    	printf("%d",ans);
    	return 0;
    }
  • 相关阅读:
    c#的运算符
    modbus-poll和modbus-slave工具的学习使用——modbus协议功能码1的解析
    modbus-poll和modbus-slave工具的学习使用——环境搭建
    STM32L4R9使用HAL库调试IIC注意事项
    蓝牙透传——介绍蓝牙最简单、最常见的通讯方式
    Chapter 2 Open Book——11
    Chapter 2 Open Book——10
    Chapter 2 Open Book——9
    线程中sleep方法和wait方法有什么区别?
    你所不知道的mybatis居然也有拦截器
  • 原文地址:https://www.cnblogs.com/DARTH-VADER-EMPIRE/p/9900983.html
Copyright © 2011-2022 走看看