首页 > 编程语言 > 详细

算法竞赛入门经典(三)

时间:2015-08-17 18:59:10      阅读:140      评论:0      收藏:0      [点我收藏+]

 

 

例题3-1 开灯问题

 

  题目:有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共k个人,问最后有那些灯开着?输入:n和k,输出开着的灯编号。k<=n<=1000。
  分析:用sign[1],sign[2],...,sign[n]表示编号为1,2,3,...,n的灯是否开着。模拟这些操作即可:
  源码:

#include<stdio.h>
#include<string.h>
#define MAXN 1000+10
int sign[MAXN];

int light()
{
    int n,k,i,j;
    scanf("%d%d",&n,&k);            //n盏灯,k个人
    memset(sign,0,sizeof(sign));    //初始置0关闭所有灯
    for(i=1;i<=k;i++)                //第i个人按开关
        for(j=1;j<=n;j++)            //对于第j号灯
            if(j%i==0)    sign[j] = !sign[j];//按开关
    for(i=1;i<=n;i++)
    {
        if(sign[i]==1)                //如果灯开着
            printf("%d ",i);
    }
    printf("\n");

    return 0;
}

 

算法竞赛入门经典(三)

原文:http://www.cnblogs.com/eniac12/p/4737266.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!