c语言,百灯熄灭问题,求思路!!!!

有M盏灯,编号为1~M,分别由相应的M个开关控制。开始时全部开关朝上(朝上为开,灯亮),然后进行以下操作:编号凡是1的倍数的灯反方向拨一次开关;是2的倍数的灯再反方向拨一次开关;是3的倍数的灯又反方向拨一次开关,......,直到是M的倍数的灯又方向拨一次开关。请从键盘输入一个整数n代表灯的数量,求出最后为熄灭状态的灯(不亮)的数量以及编号并输出。
【输入】
输入一个整数n(1<=n<=100)。
【输出】
输出为两行,第一行是熄灭状态的灯的数量;第二行是最后为熄灭状态的灯的编号
求思路!!!!!

# include <stdio.h
 
main(void) 

 int i, j, m, n; 
 int s[200]; 
 scanf("%d", &m); 
 for(i=0; i<m;i++)
    s[i] =1;         //初始状态,开为1,关为-1
 for(i=0; i<m;i++)  
   for(j=i; j<m; j=j+i+1)
     s[j] =-1*s[j];    //状态翻转
 n=0;   
 for(i=0; i<m; i++) 
   if (s[i]==-1) 
     n++ ;      // 求数量
 printf("\n %d\n", n); 
 for(i=0; i<m; i++) 
   if (s[i]==-1)
    printf("%d ",i+1);   //求编号
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-02-26

花几分钟弄好的,供大家参考

第2个回答  2014-11-23

这题so easy,此题被我占了!

# include <stdio.h>
# include <malloc.h>

int main(void)
{
    int i, j, m, n;
    char *ch;
    
    scanf("%d", &n);
    ch = malloc(n);            //虽然要这几个内存不用,,,,但是有了它逻辑性就更强了.....
    for(i=1; i<=n, i++)
    {
        for(j=0; j<=n; j+=i)
        {
            ~ch[j];
            m++
        }
    }
    printf("%d\n%d\n", m, j-i-1);
    free(ch);
    
    return 0;
}

本回答被网友采纳
第3个回答  2017-09-21
看我的:
#include<stdio.h>
int main()
{
int m,i,a;
scanf("%d",&m);
for(i=1;i<=m;i++) if((i*i)>m) break;
printf("%d\n",i-1);
for(a=1;a<=i;a++) printf("%4d",a*a);
return 0;
}
相似回答