//有n盏灯,编号为1 ~ n ,第一个人把所有的等都打开,第二个人按下所有编号为2的倍数(这些灯将关掉),第三个人按下所有编号为3的倍数的开关( //其中关掉的灯将打开,开着的灯将关掉),以此类推,一共有k个人,问最后哪些灯开着? //输入:n和k,输出开着的灯的编号。k <= n <= 1000. //样例输入:7 3 //样例输出:1 5 6 7 //////////////////////////////////////////////////////////////////////////////////// #include <stdio.h> #include <string.h> #define MAXN 1000 int a[MAXN]; int main(void) { int i,j,n,k,first = 1; memset(a,0,sizeof(a)); printf("请输入灯的个数和人数:\n"); scanf("%d%d",&n,&k); for(i = 1; i <= k; i++) { for(j = 1; j <= n; j++) { if(j%i == 0) { a[j] = !a[j]; } } } for(i = 1; i <= n; i++) { if(a[i] > 0) { if(first) { first = 0; } else { printf(" "); } printf("%d ",i); } } printf("\n"); return 0; }