算法題|-燈泡開關問題


問題描述: 有編號1~100個燈泡,起初所有的燈都是滅的。有100個同學來按燈泡開關,如果燈是亮的,那么按過開關之后,燈會滅掉。如果燈是滅的,按過開關之后燈會亮。
現在開始按開關。
第1個同學,把所有的燈泡開關都按一次(按開關燈的編號: 1,2,3,......100)。
第2個同學,隔一個燈按一次(按開關燈的編號: 2,4,6,......,100)。
第3個同學,隔兩個燈按一次(按開關燈的編號: 3,6,9,......,99)。
......
問題是,在第100個同學按過之后,有多少盞燈是亮着的?這些燈的編號是多少?要求給出解題思路或給出偽碼。

 

c#代碼

static void TurnLights()
        {
            //存放一百個燈的亮滅情況,默認為滅,這里取101是為了從編號1到100 方便數字的處理無其他意義
            bool[] lights = new bool[101];
            //從第1個同學到第100個,依次按燈
            for (int i = 1; i <= 100; i++)
            {
                //從第i個燈開始,隔着i-1個燈按,所以j+=1
                for (int j = i; j <= lights.Length - 1; j += i)
                {
                    //進行取反操作
                    lights[j] = !lights[j];
                }
            }
            
            for (int i = 1; i <= lights.Length-1; i++)
            {
                if (lights[i])
                {
                    //輸出亮着的燈編號
                    Console.Write(i+" ");
                }
            }
        }

 

Lua代碼

function TurnLights()
    --boolean類型的燈數組
    lights={}

    --i為學生號碼,依次從第一個同學到最后一個同學依次按燈
    for i=1,100,1 do
        for j=i,100,i do
            lights[j]=not lights[j]
        end
    end

    for i=1,table.getn(lights),1 do
        if lights[i]==true then
            print(i)
        end
    end
end

TurnLights()

 

 

最終得出的結果是以下編號的燈亮着

1
4
9
16
25
36
49
64
81
100


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM