zoukankan      html  css  js  c++  java
  • c++04:数组的应用:点灯问题

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

    宾馆里面有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("
    ");
        return 0;
    }

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

    补充memset用法:

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

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

    谢谢大家!

  • 相关阅读:
    Spring.Net的AOP的通知
    Spring.Net的IOC入门
    Unity依赖注入使用
    C#dynamic关键字(1)
    多线线程async与await关键字
    C#面试题
    MangoDB的C#Driver驱动简单例子
    安装vuecli和使用elememtUi
    再也不怕aop的原理了
    easyui实现多选框,并且获取值
  • 原文地址:https://www.cnblogs.com/lucasyy/p/13234823.html
Copyright © 2011-2022 走看看