开灯问题用C语言怎么解决 ?


问题:走廊里依次排列着100盏灯,依次从1号编100号,都关着。

有100个学生从1号编到100号,依次走来,

1号学生从第一只开关按起,凡是1的倍数都按一下,

2号学生从第二只开关按起,凡是2的倍数都按一下,

3号学生从第三只开关按起,凡是3的倍数都按一下,

依次类推,直到第100号学生按完为止。


最后有多少只灯亮着?


题目链接:

http://zhidao.baidu.com/question/1638953715149628980.html


*/

#include <stdio.h>

#define n 100

void main(void)

{

    int i, j, a[n];


    for(i = 0; i < n; i++)  a[i] = 0;// 初始化为全0


    for(i = 1; i <= n; i++)          //100名学生依次走来

      for(j = i ; j <= n; j = j + i) //针对100盏灯

        a[j - 1] += 1;               //进行操作


//100人对100灯,都操作完毕,下面是显示


    for(i = 0; i < n; i++)  {        //全都显示

      if((i % 8) == 0)  printf("\n");

      printf(" L%02d: %d, ", i + 1, a[i] % 2);

    } 


    printf("\n");


    j = 0;

    for(i = 0; i < n; i++)  {

      if(a[i] % 2)  {                //仅显示亮灯的

        if((j % 8) == 0)  printf("\n");

        j++;

        printf(" L%02d: %d, ", i + 1, a[i] % 2);

      }

    } 

    printf("\n\n");

}

/*


 L01: 1,  L02: 0,  L03: 0,  L04: 1,  L05: 0,  L06: 0,  L07: 0,  L08: 0,

 L09: 1,  L10: 0,  L11: 0,  L12: 0,  L13: 0,  L14: 0,  L15: 0,  L16: 1,

 L17: 0,  L18: 0,  L19: 0,  L20: 0,  L21: 0,  L22: 0,  L23: 0,  L24: 0,

 L25: 1,  L26: 0,  L27: 0,  L28: 0,  L29: 0,  L30: 0,  L31: 0,  L32: 0,

 L33: 0,  L34: 0,  L35: 0,  L36: 1,  L37: 0,  L38: 0,  L39: 0,  L40: 0,

 L41: 0,  L42: 0,  L43: 0,  L44: 0,  L45: 0,  L46: 0,  L47: 0,  L48: 0,

 L49: 1,  L50: 0,  L51: 0,  L52: 0,  L53: 0,  L54: 0,  L55: 0,  L56: 0,

 L57: 0,  L58: 0,  L59: 0,  L60: 0,  L61: 0,  L62: 0,  L63: 0,  L64: 1,

 L65: 0,  L66: 0,  L67: 0,  L68: 0,  L69: 0,  L70: 0,  L71: 0,  L72: 0,

 L73: 0,  L74: 0,  L75: 0,  L76: 0,  L77: 0,  L78: 0,  L79: 0,  L80: 0,

 L81: 1,  L82: 0,  L83: 0,  L84: 0,  L85: 0,  L86: 0,  L87: 0,  L88: 0,

 L89: 0,  L90: 0,  L91: 0,  L92: 0,  L93: 0,  L94: 0,  L95: 0,  L96: 0,

 L97: 0,  L98: 0,  L99: 0,  L100: 1,


 L01: 1,  L04: 1,  L09: 1,  L16: 1,  L25: 1,  L36: 1,  L49: 1,  L64: 1,

 L81: 1,  L100: 1,


Press any key to continue

*/


对比几个答案,做而论道编写的程序,最简单。


  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值