《算法竞赛入门经典》(第2版)——开灯问题
程序员文章站
2024-03-19 08:42:52
...
看完题目后,自己先敲了一下,运行一下是可以的,代码如下
#include<stdio.h>
int a[1000]={0};
int main(){
int n,k;
scanf("%d %d",&n,&k);
int j,i;
for(i=1;i<=k;i++)
for(j=1;j<=n;j++)
if(j%i==0)
a[j]=!a[j];
else continue;
for(i=1;i<=n;i++)
if(a[i]==1)
printf("%d ",i);
return 0;
}
然后,又对比了一下书上写的(代码如下),感觉自己写的有些啰嗦。。。
自己的反思写在下面的注释里了
#include<stdio.h>
#include<string.h>
#define maxn 1010
int a[maxn];
int main(){
int n,k,first=1,i,j;
memset(a,0,sizeof(a));//加上头文件#include<string.h>后,作用是把数组清零
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=1,!1=0,巧妙的模拟了开关的闭合
for(i=1;i<=n;i++)
//下面这一段可以当作模板记下来,输出时,能够实现空格的不少不多
if(a[i]){
if(first)
first=0;
else
printf(" ");
printf("%d",i);
}
printf("\n");
return 0;
}
多多积累经验,共勉!