原文:
有 n 盏灯,编号为 1~n,第 1 个人把所有灯打开,第 2 个人按下所有编号为 2 的倍数的开关(这些灯将被关掉),第 3 个人按下所有编号为 3 的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有 k 个人,问最后有哪些灯开着?输入:n 和 k,输出开着的灯编号。k≤n≤1000
输入:一组数据n 和 k
输出:输出开着的灯编号
样例
7 3
输出
1 3 5 7
解题思路
:在最开始的时候,把定义一个数组并且把数组中的每个数置零,经过k次循环,每次循环完成相应灯号的开关并对其进行标记,最后输出即可。需要注意的是第一个数前没有空格,以后的每个数前均有空格,因此需要一个标志变量来进行标记。
程序代码
:
#include<stdio.h>
#include<string.h>
int a[120];
int main()
{
int m,n,i,j,k,first=1;
memset(a, 0, sizeof(a));
scanf("%d%d", &n,&k);
for(i=1; i<=n; i++)
for(j=1; j<=k; j++){
if(i%j==0){
a[i]=!a[i];
}
}
for(i=1; i<=n; i++){
if(a[i]){
if(first)
first=0;
else
printf(" ");
printf("%d", i);
}
}
printf("\n");
return 0;
}