首页 > 试题广场 >

对一批编号为1~100,全部开关朝上(开)的灯进行以下操作:

[单选题]
对一批编号为1~100,全部开关朝上(开)的灯进行以下操作:凡是1的倍数反方向拨一次开关;2的倍数反方向又拨一次开关;3的倍数反方向又拨一次开关……100的倍数反方向又拨一次开关 ,问:最后为关熄状态的灯有几个。
  • 7
  • 8
  • 9
  • 10
当该数的方根为整数(即完全平方数)时朝下,其它的朝上。
这样 1、4、9、16、25、36、49、64、81、100号朝下
发表于 2015-09-05 00:03:37 回复(0)
1 4  9

发表于 2014-11-18 17:54:28 回复(0)
若一个开关编号为x,那么所有能整除x的数,都会导致开关拨动一次,例如 x = 8时,当每次拨动1,2,4,8的时候,都会导致8号开关拨动一次。
那么只有当能整除x的数为奇数的时候,最后开关才会处于关闭(因为一开始是开着的,经过奇数次拨动就处于关闭)
那么什么样的数才能满足?答案是若x是某个数的平方数的时候。因为 一般情况下,如果 x/a = b, 那么 a,b肯定会作为x的2个因数,所以一般情况下,肯定是成对出现的,只有当a=b的时候,这样才会出现奇数个因数。
编辑于 2015-09-10 15:18:27 回复(11)
每个灯的编号有几个因数,开关就会被拨动几次。所以因数个数为奇数的灯最后会熄灭,也就是1,4,9,16...81,100,总共10个
发表于 2015-04-07 09:51:22 回复(1)
主要是寻找1~100范围内每个数公倍数的个数为偶数的数的个数,由可推得满足条件的数为n^2,而满足题意的数字为1,4,9,25,36,49,……,81,100,共有10个,选D
发表于 2016-02-26 20:00:51 回复(0)
就是找1-100的完全平方数(有奇数个因子)有多少个
除1外有 4 9 16 ...... 81 100 共 10 个
发表于 2017-03-08 13:25:21 回复(0)
1.一个灯的拨动次数与其因数个数有关,有奇数个因数的灯就会关闭
2.质数的因数只有1和本身,全开着的,不管
3.合数:合数的因数为1、本身、某两个数相乘,这样的合数总有偶数个因数;
当且仅当,其开根后的结果为整数的那种才有奇数个因数,这样才会关闭,
所以只有编号为  1^2,2^2,3^2,4^2,5^2,6^2,7^2,8^2,9^2,10^2 的关闭
编辑于 2020-08-05 20:16:26 回复(0)
看了楼下兄弟好久理解了,这题不要考虑把每个数字因数拆开去理解平方。 首先设一个100以内的数m,一定存在至少一组数a.b(a和b都小于100),使得m=ab,因为至少a取1,b取m时会成立。(同时解释质数会被做掉的原因,因为会忘记1的倍数) 而当a不等于b时,这一组搭配其实是无效的,因为相当于你把灯关了又开,所以没啥用。 即使m存在多组搭配,比方说m取6的时候m=1*6=2*3,那也就是多次反复关开,灯还是亮着的。 而a=b时,就不会关了又开,因为只进行一次操作,比方说49=7*7,那么到7的时候只会做一次操作。 进行的这一次“额外操作”是没法被抵消的,因为一个平方数不能表达为两种不同正整数的平方。 所以综上,只要一个数是完全平方,它在这里对应的灯最后就会亮着的, 所以100以内(包括100)有10个完全平方数,最后就会留下10个灯啦
发表于 2022-04-19 22:52:21 回复(0)
因数个数为奇数的灯最后熄灭,如果一个数除了1和它本身以外如果还有其他因子,那一定是成对出现的。所以只有像1,4,9,16,25,36,49,64,81,100这样的数因数为奇数个。
发表于 2020-04-26 17:45:46 回复(0)
10 个
方法1:
拨动奇数次的灯灭    编号分解后有偶数个因子
拨动偶数次的灯亮    编号分解后有奇数个因子

方法2;
int main() {
    int a[101];
    memset(a, 0, sizeof(int)*101);

    for(int i = 1; i < 101; ++ i) {
        for(int j = i; j < 101; ++ j) {
            if(j % i == 0) {
                if(a[j] == 0)
                    a[j] = 1;
                else if(a[j] == 1)
                    a[j] = 0;
            }
        }

    }
    for(int k = 1; k < 101;++ k) {
        if(a[k] == 1)
        cout<<k<<"  ";
    }
    cout<<endl;
}
*********************************************
/out:Excersizes.exe
Excersizes.obj
1  4  9  16  25  36  49  64  81  100  
[Finished in 0.7s]

发表于 2015-04-15 15:52:25 回复(0)
竟然在这里遇到了密室大逃脱的题
发表于 2022-09-04 14:09:24 回复(0)
答案参考与网上:
(1)最初这100个全部开关朝上的灯是亮的.每个灯操作次数如果是奇数,则是关熄状态的灯;每个灯操作次数如果是偶数,则是亮的状态的灯.
(2)“凡是1的倍数反方向拨一次开关;2的倍数反方向又拨一次开关;3的倍数反方向又拨一次开关…… ”最后每个灯操作次数不是偶数就是奇数.
(3)1的平方数是1;,2的平方数是4;3的平方数是9;4的平方数是16;------10的平方数是100.
(4)1、4、9、16、25、36、49、64、81、100这10个数的约数个数是奇数,其它90个数约数个数是偶数,所以编号为完全平方数的灯操作次数为奇数次.而其它编号为非完全平方数的灯操作次数为偶数次.
(5)最后为关熄状态的灯的编号是1、4、9、16、25、36、49、64、81、100.也就是编号为完全平方数的灯.
发表于 2019-06-05 23:40:54 回复(0)
简单分析可知,最后要灯灭的,需要转换开关次数为奇数次,即一个数能被奇数个数整除。假设为x,则对任意一个是如果有x=ab,a≠b,则将产生2次开闭,那么如果x=a^2,则多出一次则一共为奇数次,那么最终为灯关闭。则应为平方数1^2,2^2,,,10^2,一共10个数
发表于 2020-11-29 14:44:42 回复(0)
选D
假设判断到数i时,这是1-i中能够被他整除的个数为n,若n为奇数,那么,该i号灯的状态是关闭的。所以我们有;


#include<iostream>
using namespace std;
int main()
{    
    int countEven=0;
    int sum=0;
    int const n=100;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            if(i%j==0)
            {
                countEven++;                
            }            
        }
        if(countEven%2==1)
        {
                sum++;    
                countEven=0;        
        }        
    } 
    cout<<"处于关灯状态的个数sum是:"<<sum<<endl;     
    return 0;    



                                               
                            是不是很机智,                                哈哈哈哈哈啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
发表于 2018-03-11 14:06:44 回复(0)