数组2

作者: 时间:2020-07-10 点击数:

问题3:开灯问题
   有n盏灯,编号为1..n,有k个人,编号为1..k,起初所有灯处于关状态,
第一个人经过把所有灯的开关按下,第二个人把所有是2的倍数的灯的开关按下,第三个人把所有是3的倍数的灯开关按下,
以此类推,问最后哪些灯值开着的。
(k<=n<=100)
注意:所有开关都是循环控制,每按下一次灯状态变化一次。
分析:
     int lamp[102]={0}; //0表示灯关,1表示开
  int i,n,k,j;
  //所有人开关灯的操作
  scanf("%d%d",&n,&k);
  for(i=1;i<=k;i++)  //遍历所有人,判断第i个人要动哪些开关
    for(j=1;j<=n;j++)
    if (j%i==0)  //第i个人要按下第j个开关   取反!
      lamp[j]=!lamp[j];
  //输出所有开着灯的编号
  for(i=1;i<=n;i++)
    if (lamp[i]==1) printf("%d ",i);
  printf("\n");


上一页 [1] [2] [3] [4] [5] 下一页

Copyright© 2020 Anyang Institute of Technology.All rights reserved.

学院地址:河南省安阳市黄河大道西段