1. 程式人生 > >劉汝佳演算法筆記:開燈問題

劉汝佳演算法筆記:開燈問題

題目描述:

有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 1010
int a[maxn];
int main() {
	int n, k, first=1;
	int i,j;
	memset(a, 0,sizeof(a));//把陣列a清零
	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];//如果燈的編號%人的編號==0,則開的燈關了,關的燈開了
		}
	}
	for(i=1; i<=n; i++) {
		if(a[i]) {
			if(first) {
				first=0;
			} else {
				printf(" ");
			} 
			printf("%d",i);
		}
	}
	printf("\n");
	return 0;
}