当前位置:首页 > 题解目录 > 正文内容

【题解】开关灯(1)

亿万年的星光4年前 (2021-05-01)题解目录2094

【题目描述】

假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于开启状态;有M个人(M为不大于N的正整数)也从1到M依次编号。

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

请问:当第M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。

【输入】

输入正整数N和M,以单个空格隔开。

【输出】

顺次输出关闭的灯的编号,其间用逗号间隔。

【输入样例】

10 10

【输出样例】

1,4,9

【题目分析】

  • 对某个人编号的倍数可以认为是能整除。

  • 常用的取反操作 a=!a


【参考答案】

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int n,m;
    int a[5001];
    int i,j;
    int flag=1;
 
    cin>>n>>m;
 
    memset(a,0,sizeof(a));//初始化将灯关上
    for(i=1; i<=m; i++) //m个人依次进行操作
        for(j=1; j<=n; j++) //对n盏灯进行操作
            if(j%i==0)//只对人编号的倍数进行操作
                a[j]=!a[j];//对灯进行相反处理
 
    for(i=1; i<=n; i++) //输出灯是关闭的序号
    {
        if(a[i])
        {
            if(flag)
                flag=0;//仅第一次不用先输出逗号
            else
                cout<<",";
            cout<<i;
        }
    }
    cout<<endl;
 
    return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】摘花生问题

【题解】摘花生问题

【题目描述】Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过...

【题解】排队买票

【题目描述】有M个小孩到公园玩,门票是1元。其中N个小孩带的钱为1元,K个小孩带的钱为2元。售票员没有零钱,问这些小孩共有多少种排队方法,使得售票员总能找得开零钱。注意:两个拿一元零钱的小孩,他们的位...

【题解】苯小猴

【题目描述】笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn是单词中出现次数最...

【题解】跳格子2

【题目描述】地面上有一排长度为n的格子1-n,每个格子上都有一个数xi,开始时你在位置0,每次你可以向前跳1-2格,然后取走格子上的数,直到跳到位置n+1。取走的数的和就是你的得分,现在你想知道你可能...

【题解】红与黑

【题解】红与黑

【题目描述】有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。【输入】包括多组数据。每...

【题解】取数

【题目描述】设有N 个正整数(1 <= N <= 50),其中每一个均是大于等于1、小于等于300的数。从这N个数中任取出若干个数(不能取相邻的数),要求得到一种取法,使得到的和为最大。例...