個(gè)人學(xué)習(xí)筆記缺猛,有錯(cuò)誤或者建議歡迎指出。
/*開(kāi)燈問(wèn)題
? 有n盞燈椭符,編號(hào)為1~n荔燎。第1個(gè)人把所有燈打開(kāi),第2個(gè)人按下所有編號(hào)為2的倍數(shù)的開(kāi)關(guān)(這些燈將被關(guān)閉)销钝,
? 第3個(gè)人按下所有編號(hào)為3的倍數(shù)的開(kāi)關(guān)(其中關(guān)掉的燈將被打開(kāi)有咨,開(kāi)著的燈將被關(guān)閉),以此類推蒸健。一共有
? k個(gè)人座享,問(wèn)最后有哪些燈開(kāi)著?輸入n和k似忧,輸出開(kāi)著的燈的編號(hào)渣叛。k<=n<=1000
*/
//#define LOCAL
#include <stdio.h>
#define max_n 1000
int main()
{
//輸入輸出重定向,方便讀入測(cè)試文檔
#ifdef LOCAL
FILE* stream1;
freopen_s(&stream1, "data.in", "r", stdin);
freopen_s(&stream1, "data.out", "w", stdout);
#endif
int n, k, a[max_n];
//讀入數(shù)據(jù)直到?jīng)]有數(shù)據(jù)
while (scanf_s("%d %d", &n, &k) != EOF)
{
//將n盞燈全部置0橡娄,即關(guān)閉
for (int i = 0; i < n; i++)
{
a[i] = 0;
}
//循環(huán)k個(gè)人
for (int i = 1; i <= k; i++)
{
//循環(huán)n盞燈
for (int j = 1; j <= n; j++)
{
//如果第j盞燈恰好是第j個(gè)人的倍數(shù)诗箍,則燈的狀態(tài)改變
if (j % i == 0)
{
if (a[j - 1] == 0)
a[j - 1] = 1;
else
a[j - 1] = 0;
}
}
}
for (int i = 0; i < n; i++)
{
if (a[i] == 1)
printf("%d ", i + 1);
}
printf("\n");
}
return 0;
}