c语言实现开灯问题

时间:2023-03-09 02:58:26
c语言实现开灯问题

开灯问题:

有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k≤n≤1000。

附上代码:

    #include<stdio.h>
#include<string.h> #define MAX 1000+10
int a[MAX]; int main()
{
int i, j, n=, k=;
//memset(a, 0, sizeof(a));
for(i = ; i <= k; i++){ //人数
for(j = ; j <= n; j++){ //灯的数量
if(j%i == ) a[j] = !a[j];
//按下编号为自己编号倍数的开关,通过0,1定义灯的开关状态
}
}
for(i = ; i <= n; i++){//遍历灯的数量
if(a[i]) //如果灯开着执行
{
if(i == n){//最后一盏灯
printf("%d,", i);
}
else printf("%d ", i);
}
}
return ;
}