C语言开灯问题,有n(n<100)盏灯,编号为1~n。第一个人把所有灯都打开,第二个人按下所有

开灯问题,有n(n<100)盏灯,编号为1~n。第一个人把所有灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
/*0表示关灯,1表示开灯*/
int n,k,a[101],i,b,c,d;
printf("输入人数");
scanf("%d",&k);
printf("输入灯的数目");
scanf("%d",&n);
for(i=1;i<101;i++)
{
a[i]=0;

}

for(b=1;b<=k;k++)
{

for(c=1;c<=n;c++)
{

if(c%b==0)
{
if(a[c]==0)
{
a[c]=1;
}else
{
a[c]=0;
}

}

}

}
for(d=1;d<=n;d++)
if(a[d]==1){
printf("%d",d);
}

}
为什么输出不了结果啊?

看代码比写代码麻烦,写一个你作参考……

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void){
    char light[101];
    int n,k,i,j;
    while(1){
        printf("Input n & k(0<n<100 0<k<=n)...\nn=");
        if(scanf("%d%d",&n,&k) && n>0 && n<100 && k>0 && k<=n)
            break;
        printf("Error, redo: ");
    }
    for(i=1;i<=n;light[i++]=1);
    for(i=2;i<=k;i++)
        for(j=i;j<=n;j++)
            if(j%i==0)
                light[j]^=1;
    for(i=1;i<=n;i++)
        if(light[i])
            printf("%d ",i);
    printf("\n");
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-24
for (b = 1; b <= k; k++) 这里字母写错了吧,应该是for(b = 1; b <= k; b++)本回答被提问者采纳
相似回答