有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("\n"); //最後再輸出換行符
system("PAUSE");
return 0;
}
總結:1 用一個標誌來判斷是否爲第一次輸出,如是,不輸出空格,否則先輸空格後輸數字
2 開關燈也可以用0 1