最後亮的電燈數

題目

有n個燈排成一排,開始全部爲滅。有n個學生,第一個學生把所有是1倍數的燈開關按一下(燈打開),此時所有燈都打開;第二個學生把所有是2倍數的燈按一下開關(開啓變爲關閉,關閉變爲開啓);第三個學生把所有是3 倍數的燈按一下……,以此內推,直到第n個同學把所有是n倍數的燈按一下開關。

注:燈只有兩種狀態,開啓和關閉,開啓狀態按一下可以轉換爲關閉狀態,關閉狀態按一下可以轉換爲開啓狀態。

解答

對於一個燈,無論按多少次開關,只要是按的開關總次數是奇數,那麼這個燈最終就是開啓狀態;只要是按的開關總次數是偶數,那麼這個燈最終就是關閉狀態。
一個燈被按的次數就是這個燈編號的因數的個數,要求有多少個燈亮着就是有多少個燈編號的因數個數是奇數。一個數的因數有奇數個,即這個數的因數是左右對稱,同時中間有一個,即X×Y=n,當X=Y時,有一個值。也就是一個完全平方數。

推導得到:求n個數中完全平方數的個數。

代碼

C語言程序實現

int getPerfectSquare(int n){
    int sum = 0; // 完全平方數的個數
    int i;
    for(i=1; i<=n; i++){
        if(i*i>n){
            break;
        }
        // 打印得到的完全平方數
        printf("%d * %d = %d\n", i,i,i*i);
        ++sum;
    }
    return sum;
}

擴展:

完全平方數問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章