用C语言编写的问题:一条长廊装有100盏灯,从头到尾编号1,2,3......99,100.每盏灯有一个拉线开关。

一条长廊装有100盏灯,从头到尾编号1,2,3......99,100.每盏灯有一个拉线开关。开始电灯全部关着,有100个学生走过。第一个学生把号码凡是1的倍数电灯开关拉一下,第2个学生把号码凡是2的倍数电灯开关拉一下,第3个学生把号码凡是2的倍数电灯开关拉一下...如此下去,第100个学生走完,还有几盏灯亮着?
答案是10盏 .100个人过后,只有1、4、9、16、25、36、49、64、81、100这几盏灯亮着
凡是最后亮的灯,都被按过奇数次
每盏灯被按的次数,等于它的约数的个数,比如8号灯,它被第1、2、4、8这四个人按到,所以最后是灭的状态
最后,只有完全平方数,其约数个数为奇数
解题思路是这样
问 用C编写程序验证这个猜想

#include <stdio.h>

int main()
{
int light[100];
int i, j;

/*初始化*/
for (i = 0; i < 100; i++)
light[i] = -1; //-1表示灯是关的,1表示灯是开的

/*拉灯*/
for (i = 0; i < 100; i++){ //i表示第i+1个人
for (j = 0; j < 100; j++){ //j表示第j+1盏灯
if ((j+1)%(i+1) == 0) //如果第(j+1)恰好是(i+1)的倍数,则拉一下灯
light[j] *= -1;
}
}

/*把亮着的灯输出*/
for (j = 0; j < 100; j++)
if (light[j] == 1)
printf("%d\n", j+1);

return 0;
}
温馨提示:答案为网友推荐,仅供参考
相似回答