1.P39--开灯问题
问题描述:有n盏灯,编号为1~n。第一个人把所有灯打开,第二按下所有编号为2的倍数的开关(即每按一次灯的状态都将发生改变),第k格人将按下所有为k倍的编号开关。输入n和k,且k<=n<=1000,输出最后开着的灯的编号。
示例输入:7 3
样例输出:1 5 6 7
分析:创建一个数组,且令该数组的长度等于n,并以0表示关,1表示开,最初该数组所有元素都为0。每操作一次,0和1互换。
代码如下:
#include <stdio.h>
int main() {
int n,k;
scanf("%d%d",&n,&k);
int a[n];
for (int i=0; i<=n-1; i++) {
a[i]=0;
}
for(int i=1; i<=k; i++) {
for(int j=1; j<=n; j++) {
if (j%i==0) {
if (a[j-1]==0) {
a[j-1]=1;
} else {
a[j-1]=0;
}
}
}
}
for(int i=0; i<=n-1; i++) {
if (a[i]==1)
printf("%d",i+1);
}
return 0;
}