开灯问题,有n盏灯,编号为1~n。第一个人把所有灯都打开,第二个人按下所有编号为2的倍数的开关(这

开灯问题,有n盏灯,编号为1~n。第一个人把所有灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打... 开灯问题,有n盏灯,编号为1~n。第一个人把所有灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号 展开
 我来答
匿名用户
2015-01-23
展开全部
//以下代码 vc6.0中编译通过。。
#include <stdio.h>
#include <string.h>
#define MAXN 1000+10
int a[MAXN];
int main()
{
int i, j, n, k, first = 1;
memset(a, 0, sizeof (a));
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];
for (i=1; i<=n; i++)
if (a[i]) {
if (first) first = 0;
else printf(" ");
printf("%d", i);
}
printf("%\n");
 return 0;
}
没太明白你的意思,欢迎继续追问。
更多追问追答
追问
不知道为什么要这样做
追答
楼下已给出注释。。自己理解一下吧。。。
风雷九州
2015-01-23 · TA获得超过3025个赞
知道大有可为答主
回答量:1127
采纳率:100%
帮助的人:437万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 1000+10
int main()
{
    int i,j,n,k,first=0;
    int a[max];
    scanf("%d%d",&n,&k);
    memset(a,0,sizeof(a)); //0代表关灯,1代表开灯
    
    for(i=1;i<=k;i++)      //k个人
        for(j=1;j<=n;j++)  //n个灯
            if(j%i==0)
                a[j]=!a[j]; //取反,0变1,1变0,原来开变关,关变开
                
    for(i=1;i<=n;i++) //最后输出a[i]的值就可以了
        if(a[i])
            printf("%d ", i); //不明白你的代码里面first是干嘛用的
    
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
张图片子
2021-03-11
知道答主
回答量:3
采纳率:0%
帮助的人:1487
展开全部
#include <stdio.h>
main()
{
int i,j=2,x[1001],n,d,r;
scanf("%d%d",&d,&r);
for (i=1;i<=d;i++)//灯的编号
x[i]=i;

while (j<=r)
{
for (i=j;i<=d;i++) //灯数从等于人数开始
{
if (i%j==0) //是人的倍数
{
if (x[i]!=0)//不为0则要关灯
x[i]=0;
else //为0则要开灯
x[i]=i;
}
}
j++; //下一个人数
}
for (i=1;i<=d;i++)
if (x[i]!=0)
printf("%d ",x[i]);
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式