码迷,mamicode.com
首页 > 编程语言 > 详细

c++之四:数组的应用:点灯问题

时间:2020-07-04 15:39:13      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:lse   ret   def   code   print   turn   efi   技巧   max   

今天来和大家分享一道题:开门问题(有的地方是点灯问题)

宾馆里面有100个房间,从1到100编号,

第一个服务员把所有门打开,

第二个服务员把所有编号2倍数的门做相反处理,

第三个服务员把所有编号为3倍数的门做相反处理,

以此类推,到第100个服务员来做处理之后,问哪些门是开着的?

下面是分析:

分析:用a[1],a[2],……,a[n]表示编号1,2,3,……,n的门是否开着,模拟操作即可,程序如下:

#include <cstdio>
#include <cstring>
#define MAXN 100+10
int a[MAXN];
int main(){
    int first=1;
    memset(a,0, sizeof(a));
    for (int i=1;i<=100;++i)
        for (int j=1 ;j<=100 ;++j)
            if (j%i==0)
                a[j]=!a[j];
    for (int i=1;i<=100;++i)
        if (a[i]){
            if (first)
                first=0;
            else
                printf(" ");
            printf("%d",i);
        }
    printf("\n");
    return 0;
}

运行结果:1 4 9 16 25 36 49 64 81 100(有奇数个因数的数)

补充memset用法:

memse(a,0,sizeof(a))的作用就是把数组a清零,方便又便捷。

另一个技巧在于输出:为了避免输出多余空格,设置了一个标志变量first,可以表示当前要输出是否为第一个。第一个变量前不应有空格,其他都有。

 

谢谢大家!

 

c++之四:数组的应用:点灯问题

标签:lse   ret   def   code   print   turn   efi   技巧   max   

原文地址:https://www.cnblogs.com/lucasyy/p/13234823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!