问题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]
下一页