1. 程式人生 > >c 語言問題:開燈問題

c 語言問題:開燈問題

n盞燈編號1~n,第一個人開啟所有燈,第二個人關閉編號為2的倍數的燈,第三個人關閉3為倍數編號的燈,以此類推。共有k個人,問最後有哪些燈開著?
樣例輸入:
7 3
樣例輸出:
1 5 6 7
程式碼:
#include<stdio.h>

#include<string.h>
#include<stdlib.h>
#define w 105
int main()
{
int a[w];
int n, k, i, j, first = 1;//first為標誌變數只表示真假值
memset(a, 0, sizeof(a));
scanf_s("%d %d", &n, &k);
a[0] = n;
//這與判斷素數有點像,
for (i = 1; i <=k; i++)//通過迴圈關掉每個人該關的燈
{
for (j = 1; j <= n; j++)
{
if (j%i == 0)//判斷是不是他該關的燈
{
a[j] = !a[j];//!為取反,將0取為1,將不為1的數變為0
}
}
}
for (int i = 1; i <= n; i++)
{
if (a[i])
{
if (first)
{
first = 0;
}
else
{
printf(" “);
}
printf(”%d", i);
}
}
printf("\n");
return 0;
}