• 算法竞赛入门经典 例题 3-1 开灯问题


      

         有n盏灯,编号为1~n,第1个人把全部灯打开,第2个人按下全部编号为2的倍数的开关(这些灯将被关掉),第3个人按下全部编号为3的倍数的开关(当中关掉的灯被打开,       开着灯将被关闭),依此类推。

    一共同拥有k个人。问最后有哪些灯开着?

        输入:n和k。输出开着的灯编号。k≤n≤1000。

       例子输入:7  3

       例子输出:1 5 6 7 

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAXN 1000 + 10
    int a[MAXN];
    
    int main(int argc, char *argv[])
    {
      int i, j, n, k, first = 1;
      scanf("%d %d", &n, &k);
      memset(a, -1, sizeof(a));
      for(i = 1; i <= k; i++)
         for(j = 1; j <= n; j++)
         {
            if(j%i == 0) a[j] = -a[j];
         }
         /* 
      for(j = 1; j <= n; j++)
         if(a[j] == 1) printf("%d ", j); //最后应该没空格 
           
           */   
                                  
      for(j = 1; j <= n; j++)
         if(a[j] == 1) {if(first) first = 0; else printf(" "); printf("%d", j);}
      printf("
    ");     //最后再输出换行符 
      system("PAUSE");	
      return 0;
    }

    总结:1 用一个标志来推断是否为第一次输出。如是,不输出空格。否则先输空格后输数字

                2 开关灯也能够用0 1

  • 相关阅读:
    HDU 2236 无题II
    P2220 [HAOI2012]容易题
    UVA11383 Golden Tiger Claw
    AT2272 [ARC066B] Xor Sum
    CentOS7 静默安装oracle12c
    SNAT与DNAT
    Linux下离线安装Docker
    TJOI2017 DNA 和 BJOI2015 隐身术
    LOJ6169 相似序列
    BJOI2019 删数
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7105924.html
Copyright © 2020-2023  润新知