• 开灯问题


    问题描述:有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关,依此类推,一共k个人,问最后有哪些灯开着?   输入n,k,输出开着的灯的编号。  k<=n<=1000

    思路:定义一个存储灯的布尔类型的数组,将它们的值都设置为false,表示灭。然后遍历处理一下,输出值为真的灯的编号。

     1 #include<iostream>    
     2 
     3 using namespace std;
     4 bool a[100];
     5 int main()
     6 {
     7     int n, k;
     8     cin >> n >> k;
     9     memset(a, false, sizeof(int));  // 将数组全部置为false
    10 
    11     for (int i = 1; i <= k; i++)          //    有k个人
    12         for (int j = 1; j <= n; j++) {      //  有n盏灯
    13             if (j%i == 0) a[j] = !a[j];       // 如果灯的编号不是人的编号的倍数,将数组置反。
    14         }
    15     for (int i = 1; i <= n; i++) {   //   打印合格数据
    16         if (a[i])cout << i << " ";
    17     }
    18 
    19     system("pause");
    20 }
  • 相关阅读:
    3.10上午学习内容
    计算机网络基础
    2017.3.30-morning
    2017.3.29-afternoon
    2017.3.29-morning
    2017.3.28-afternoon
    2017.3.28-morning
    2017.3.27-afternoon
    2017.3.27-morning
    2017.3.24-morning
  • 原文地址:https://www.cnblogs.com/ll-10/p/9574143.html
Copyright © 2020-2023  润新知