開關抽屜問題 微軟面試邏輯題分析

2021-04-09 00:50:15 字數 2184 閱讀 8400

一家中學在每週的最後一天都舉行乙個慣例活動

:學生們來到大廳裡站到關閉的抽屜前

.吹第一聲哨的時候

,學生們把每乙個抽屜都開啟

.吹第二聲哨的時候

,學生們每隔乙個關上乙個抽屜(抽屜

2,4,6,8,10,….).

吹第三聲哨的時候

,學生們每隔兩個開

/關抽屜,開

/關的意思是

:如果抽屜是開著的

,就把它關上

;如果抽屜是關著的

,就把它開啟

.他們開

/關抽屜

3,6,9,12,15….等等.

響第四聲哨的時候

,學生們每隔三個開

/關抽屜

.響第五聲哨的時候

,學生每隔四個抽屜開

/關抽屜

.如此一直進行下去

.

現在讓我們把問題簡化一下

.乙個小學校,只有

100個抽屜

.那麼當哨聲響到

100聲的時候,站在

100號抽屜旁邊的學生

(而且只有這個學生)開

/關了自己的抽屜

.請問現在有多少個抽屜是開著的

?

首先應該認識到

,這個問題會比你想象的要簡單的多

.做為一到面試題

,不可能等你算完

100步

.因此一定存在一種簡化問題的技巧

,而且答案也不會過於複雜

.要不就是

100個抽屜都開著

,要不就是沒有抽屜開著

,要不就是有一種概念模式可以輕鬆地計算出處於開啟狀態的抽屜的數量

. 例如

,我們可以先考慮

10個抽屜的情況

,看看能不能找出什麼規律來.用

10個數字表示相應的

10個抽屜

,每一次動作就在相應的數字下面畫乙個記號,直到

10次開

/關行動

,這時候應該在

10下面畫記號

.如下表所示

: 1

2

3

4

5

6

7

8

9

10

/

//

//

///

//

//

///

這之後抽屜的開

/關都不會再影響到前

10個抽屜.第

11次行動只會影響到

11,22,33….

上面的表只是前

10個抽屜的最終狀態

.既然剛開始的時候抽屜是關著的

,因此如果抽屜的開

/關次數為奇數

,則這個抽屜的最終狀態是開啟的

,如果抽屜的開

/關次數是偶數

,那麼這個抽屜是關著的

.

上表中

1,4,9

號是開啟的

,而其他是關閉的.而

1,4,9

都是乙個完全平方數

,從這裡我們可以一窺端倪

.

為什麼位置為完全平方數的抽屜都是開啟的嗎

?這是因為你每次閉合這個抽屜時

,都含有這個抽屜位置數的乙個因數

.因數成對出現,例如

,12,

可以表示為

1*12,

或者2*6

或者3*4.

既然有3

種方法可以把

12分解成

2個因數

,也就是說它有

6個因數

.也就是說,第

12個抽屜要開/關

6次

.只有當乙個抽屜的位置數的因數中有兩個因數是相同的

,這個位置數所擁有的因數的數量才不會是偶數.例如

,9可以分解為

1*9和

3*3.

這樣它就只有

3個因數

(1,3,9).

只有位置數為完全平方的抽屜開

/關的次數為奇數

,這些抽屜的最終狀態是開啟的.1到

100中間的完全平方數有

1,4,9,16,25,36,49,64,81,100.因此,

以上位置的抽屜是開啟的

.

四人過橋 微軟面試邏輯題

有4 個人在晚上通過一座搖搖欲墜的小橋 許多橋板已經毀壞 並且該橋每次只能讓 2個人通過 多於 2個人橋就倒榻了 過橋的人必須要用到手電筒 不然一腳踏空就沒命了 只有乙隻手電筒 4個人的行走速度不同 亞當用 1分鐘可以過橋 拉里需要2分鐘 埃奇需要5分鐘 最慢的博努需要 10分鐘 17分鐘後橋就要倒...

php 面試程式邏輯問題,PHP面試之四 邏輯思維

資料結構 常見資料結構 array 陣列是 最簡單 而且 應用最廣泛 的資料結構 特徵 1 使用連續記憶體空間來儲存 2 存放相同型別或著衍生型別的元素 php陣列比較特別,可以存放八種資料型別 3 通過下標來訪問 set 集合 特徵 1 儲存不重複的元素 map 字典 特徵 1 就是php關聯陣列...

網上流傳的微軟面試邏輯題分析

殺父問題 在乙個村莊中 50對夫婦中的每乙個丈夫都曾經不忠於妻子 一旦某個男人與別的女人有染 村子裡的女人 除了這個男人的妻子 因為大家都瞞著她 立刻就知道了 村子很小 村里規定對通姦行為的嚴厲處罰是通姦男人的妻子必須在當天親手殺死自己的丈夫 所有的女人都願意遵守這條法律 問題是 有一天 永無過失 ...