1. 程式人生 > >開燈問題 P39

開燈問題 P39

有n盞燈,編號1~n 。第一個人把所有燈點亮 ,第2個人按下所有編號為2的倍數的燈開關,第3人按編號為3的燈的倍數的燈的開關,依次k個人按下開關(其中關的燈被開啟,開的燈被熄滅),求最後哪些燈開著?k<=n<=1000。

【分析】

用陣列直接模擬操作即可。

#include<stdio.h>
#include<string.h>
const int maxn=1010; 
int a[maxn];
int main()
{
	int n,k,first=1;
	scanf("%d%d",&n,&k);
	memset(a,0,sizeof(a));
	for(int i=1;i<=k;++i)
	{
		for(int j=1;j<=n;++j)
		{
			if(j%i==0) a[j]=!a[j];
		}
	}
	for(int i=1;i<=n;++i)
	{
		if(a[i])
		{
			if(first) first=0;
			else
				printf(" ");
			printf("%d",i);
		}
	}
	printf("\n");
	return 0;
}