算法竞赛入门经典 开灯问题

来源:互联网 发布:供应商管理数据流程图 编辑:程序博客网 时间:2024/05/17 07:44
/*有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯被打开,开着灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?    输入:n和k,输出开着的灯编号。k≤n≤1000。*/ #include<stdio.h>#include<string.h>#define MAXN 1000+10int a[MAXN];int main(){int i,j,n,k,first=1;memset(a,0,sizeof(a));//把数组a清零scanf("%d%d",&n,&k);//k个人对n盏灯进行操作 for(i=1;i<=k;i++)for(j=1;j<=n;j++)  if(j%i==0) a[j]=!a[j];//输出最后剩下的灯的编号  for(i=1;i<=n;i++)if(a[i]){if(first)first=0;//去除第一数之前的空格 elseprintf(" ");printf("%d",i);}printf("\n");return 0;} 

memset
  原型:extern void *memset(void *buffer, int c, int count);          用法:#include <string.h>    功能:把buffer所指内存区域的前count个字节设置成字符c。    说明:返回指向buffer的指针。    举例:      // memset.c            #include <syslib.h>      #include <string.h>      main()      {        char *s="Golden Global View";                clrscr();                memset(s,'G',6);        printf("%s",s);        getchar();        return 0;      }
0 0