本文主要是介绍ACM-开灯问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*CopyRight@ NEWPLAN 2015.3.3 22.57
有n盏灯,编号为1-n.第一个人把所有的灯打开,第二个人按下所有的编号为2的倍数的开关,(这些灯全部被关掉,)
第三个人按下编号为3的倍数的开关,(其中关掉的灯将被打开,开着的灯将被关闭),以此类推,一共有K个人,问最后那些灯是开着的?
输入:n和k 输出开着灯的编号 K<=n<=1000
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int k=0,n=0,j=0,s=2;/*N表示灯的个数*/
char *ps=NULL;
scanf("%d%d",&n,&k);
ps=(char*)malloc(n*sizeof(char));
memset(ps,0x1,n*sizeof(char));
for (j=1;j<k;j++)/*j表示的是循环的次数,用于表示人数操作 k表示人数*/
{s=j+1;
while(s<n)
{
ps[s-1]=!ps[s-1];
s=s*s;
}
}for(j=0;j<n;j++)
if(ps[j])
printf("%d ",j+1);
return 0;
}
这篇关于ACM-开灯问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!