开灯问题

来源:互联网 发布:mac os10.13锐捷 编辑:程序博客网 时间:2024/06/08 17:35

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

样例输入:7 3

样例输出:1 5 6 7

这个题目简直就是为数组量身定制的,假设a[i] = 1代表开着,a[i] = 0;代表关着,对数组进行非的操作,a[i] = !a[i]这样就把关着的开了,开着的关了,妙。

#include <stdio.h>#include <string.h>#define N 1005int main(){int a[N], n, k;scanf("%d %d", &n, &k);memset(a,0,sizeof(a));for(int i = 1; i <= k; i++){for(int j = 1; j <= n; j++){if(j % i == 0)a[j] = !a[j];}}for(int i = 1; i <= n; i++)if(a[i])printf("%d ", i);return 0;}

 

0 0