在
看到的這個問題,也想做一下。題目是這樣的
房間裡有100盞電燈,編號為1,2,3……100,每盞燈上有乙個按鈕,初始時燈全都是關的。編好號的100位同學由房間外依次走進去,將自己編號的倍數的燈的按鈕全部按一次,例如第一位同學把編號是1的倍數的燈的按鈕按一下(此時100盞燈全亮),第二位同學把編號是2的倍數的燈的按鈕按一下(此時只有50盞燈亮著,50盞被這個人按滅了)……第100位同學把編號是100的倍數的燈(即編號為100的燈)的按鈕按一下,請問依次走完後,還有多少盞燈亮著?
最簡單的做法就是模擬一下100個同學進入房間的情景,從1號同學開始每個人都去按一遍開關,最後看一下哪些燈亮著,這個方法最簡單也最容易想到,可是效率有點低。其實可以計算一下每個開關被按下的次數,因為剛開始的時候所有的燈泡都是關著的,所以如果某個燈泡的開關被按了奇數次,那麼這個燈泡最終就是開著的,否則就是關著的。那怎麼計算每個燈泡開關被按下的次數呢?因為每個同學都會按下自己編號倍數的開關,即如果燈泡編號是同學編號的倍數,他就會按下開關,也就是說如果同學編號是燈泡編號的約數,他就會按下開關(這不是廢話麼)。那麼統計一下燈泡編號約數的個數就可以了,約數個數為計數的燈泡最後開著,約數個數為偶數的燈泡最後關著。下邊是**:
public class lamp
}system.out.println(result);
}//求n約數的個數
public static int getfactornum(int n)
}return result;
}//判斷n是否為奇數
public static boolean isodd(int n)
}
--------------------------------更新------------------------------
又想了一下還有更簡單的演算法,因為乙個數的約數都成成對出現的,也就是說如果n存在乙個約數p,那麼一定有乙個q與之相對應且滿足n=pq,所以n約數的個數一定是偶數,但是有一種情況例外,那就是p=q,所以只有編號為完全平方數的燈泡亮著。按著這個方法計算就簡單多了,直接return (int)math.sqrt(100);
一道邏輯題 房間裡有100盞電燈
一道挺有意思的邏輯題 房間裡有100盞電燈,編號為1,2,3 100,每盞燈上有乙個按鈕,初始時燈全都是關的。編好號的100位同學由房間外依次走進去,將自己編號的倍數的燈的按鈕全部按一次,例如第一位同學把編號是1的倍數的燈的按鈕按一下 此時100盞燈全亮 第二位同學把編號是2的倍數的燈的按鈕按一下 ...
一道邏輯題
前幾天在網上看到一道題目 將54張撲克牌按照某種次序進行排列,然後取出第一張放至底部,然後將現在的第一張翻開拿出來,不斷迴圈,直至手中沒有撲克牌,而且拿出撲克牌的順序依次是紅心a k 方片a k 黑桃a k 梅花a k 大王 小王。這道題目讓我想起了小時候老爸給我出的題目,取一幅撲克牌同花色的a k...
一道邏輯思維題
新聞上新加坡一道為十五六歲學生設計的奧數題被人放上網,不料惹得西方國家網民絞盡腦汁爭相答題。許多人驚呼,新加坡孩子竟然要做這麼難的數學題啊!值得注意的是,英國 美國等西方國家網民普遍震驚,而一些亞洲國家網民則相對淡定。對這一現象,不少人表示 只能呵呵!對於多年不動腦筋的學渣試著理解一下先 alber...