用C语言编写的问题:一条长廊装有100盏灯,从头到尾编号1,2,3.99,100.每盏灯有一个拉线开关.一条长廊装有100盏灯,从头到尾编号1,2,3.99,100.每盏灯有一个拉线开关.开始电灯全部关着,有100个学生

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/30 20:39:54

用C语言编写的问题:一条长廊装有100盏灯,从头到尾编号1,2,3.99,100.每盏灯有一个拉线开关.一条长廊装有100盏灯,从头到尾编号1,2,3.99,100.每盏灯有一个拉线开关.开始电灯全部关着,有100个学生
用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编写程序验证这个猜想

用C语言编写的问题:一条长廊装有100盏灯,从头到尾编号1,2,3.99,100.每盏灯有一个拉线开关.一条长廊装有100盏灯,从头到尾编号1,2,3.99,100.每盏灯有一个拉线开关.开始电灯全部关着,有100个学生
#include
int main()
{
\x09int light[100];
\x09int i, j;
\x09
\x09/*初始化*/
\x09for (i = 0; i < 100; i++)
\x09\x09light[i] = -1; //-1表示灯是关的,1表示灯是开的
\x09
\x09/*拉灯*/
\x09for (i = 0; i < 100; i++){ //i表示第i+1个人
\x09\x09for (j = 0; j < 100; j++){ //j表示第j+1盏灯
\x09\x09\x09if ((j+1)%(i+1) == 0) //如果第(j+1)恰好是(i+1)的倍数,则拉一下灯
\x09\x09\x09\x09light[j] *= -1;
\x09\x09}
\x09}
/*把亮着的灯输出*/
\x09for (j = 0; j < 100; j++)
\x09\x09if (light[j] == 1)
\x09\x09\x09printf("%d\n", j+1);
\x09return 0;
}