作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/04 19:38:22
用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
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;
}
用C语言编写的问题:一条长廊装有100盏灯,从头到尾编号1,2,3.99,100.每盏灯有一个拉线开关. 有200盏灯,每灯都由一个独立的拉线开关控制.这些灯开始都处于关闭状态,编号是1~200号.有200个小朋友,编号也是1 2009盏亮着的灯,各有一个拉线开关控制,按顺序编号为1、2、3、...、2009,将编号为2的倍数的灯的拉线各拉 2006盏亮着的电灯,各有一个拉线开关控制,按顺序编号为1,2,…,2006.将编号为2的倍数的灯的拉线各拉一下;再将编 1、有A、B、C、D、E、F、G七盏灯,各自装有一个拉线开关,开始B、D、F亮着, 1000盏亮着的电灯,各有一个拉线开关控制,按顺序编号为l,2,…,1000 . 有100盏亮着的电灯,各有一个拉线开关控制着.现将其顺序编号为1,2,3,...,2008,将2的倍数,3的倍数,5的倍 2009盏亮着的灯,各有一个拉线开关控制,按顺序编号为1.2.3….2009,将编号为2的倍数的灯的拉线各拉一下, 有1997盏亮着的灯,各由一个拉线开关控制着,现按其编序编号为1,2,3,……,1997,然后将编号为2的倍数的灯的灯线 有1997盏亮着的电灯,各有一个拉线开关控制着.现将其顺序编号为1,2,3,…,1997.将编号为2的倍数的灯线拉一下, 有1997盏亮着的电灯,各由一个拉线开关控制着,现按其顺序编号为1,2,……1997,然后将编号为2的倍数的灯线拉一下; 2011盏亮着的灯,各有一个拉线开关控制,按顺序编号为1、2、3、···、2011,将编号为2的倍数的灯拉一下,