資料結構與演算法之亮燈的盞數

2021-08-21 10:32:07 字數 1089 閱讀 7756

一條長廊裡依次裝有n(1 ≤ n ≤ 65535)盞電燈,從頭到尾編號1、2、3、…n-1、n。

每盞電燈由乙個拉線開關控制。開始,電燈全部關著。

有n個學生從長廊穿過。第乙個學生把號碼凡是1的倍數的電燈的開關拉一下;

接著第二個學生把號碼凡是2的倍數的電燈的開關拉一下;

接著第三個學生把號碼凡是3的倍數的電燈的開關拉一下;

如此繼續下去,最後第n個學生把號碼凡是n的倍數的電燈的開關拉一下。

n個學生按此規定走完後,長廊裡電燈有幾盞亮著。

注:電燈數和學生數一致。

解題思路一:要判斷還剩幾盞燈亮著,需要知道每盞燈是被操作奇數次還是偶數次。

若是偶數次,則該盞燈關閉;若為奇數次,則該盞燈開啟

#include
#define max 65535

int main(int argc, cahr* argv)

; int light_number = 0;

int i = 1;

int j = 1;

//get the number of times each light is operated

for(i = 1; i <= max; ++i) }

for(i = 0; i < max; ++i)

printf("the number of light on is %d.", light_number);

return 1;

}

解題思路二:要知道每盞燈被操作的次數是奇數還是偶數,可以對於乙個任意數m,都有一對因子i和j,使得i*j=m,則m編號的燈被i和j操作。若操作奇數次,則肯定會有乙個數k,使得k*k=m。所以此題轉換為求在1-65535中有多少個k*k

#include #define max 65535

int main(int argc, char* argv)

k -=1;

printf("the number of light on is %d.", k);

return 1;

}

很明顯第二種解題思路優於第一種解題思路

關於燈的盞數的亮滅問題c

一條長廊裡依次裝有n盞電燈,從頭到尾編號1 2 3 n 1 n。每盞電燈由乙個拉線開關控制。開始,電燈全部關著。有n個學生從長廊穿過。第乙個學生把號碼凡是1的倍數的電燈的開關拉一下 接著第二個學生把號碼凡是2的倍數的電燈的開關拉一下 接著第三個學生把號碼凡是3的倍數的電燈的開關拉一下 如此繼續下去,...

資料結構與演算法之演算法

1.乙個問題的解可以分解為幾個子問題的解 2.這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣 3.存在遞迴終止條件 假如這裡有 n 個台階,每次你可以跨 1 個台階或者 2 個台階,請問走這 n 個台階有多少種 走法?如果有 7 個台階,你可以 2,2,2,1 這樣子上去,也可以 1...

《資料結構與演算法》之資料結構簡介

資料結構 資料 結構,資料結構是計算機儲存 組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。一 資料的邏輯結構 指反映資料元素之間的邏輯關係的資料結構,其中的邏輯關...