close

C++生存之道

 

問題描述:

一位數學家在蠻荒探險,在部落做客,卻遇到外族強力來犯,酋長帶著族人和數學家總共3 1 人,一同被圍困在一個山洞內,正面臨著無可避免的失敗 ,他們下定決心, 不成功便成仁 ,寧死不降 。於是他們決定安排自己在一圓圈上,其中酋長被指為 1 號, 然後開始進行他們的決定 ,方法是順時針方向由 1 號算起, 每二人按順序自殺, 直到所有人都死光為止。 很明顯的第一圈之 2 , 4 , ... , 28, 30 相繼自殺, 接下來的是誰 ? 應該是 32 號嗎 ? 但他們才只有 31 人, 所以 32 除以 31 餘數是 1 , 接下來應該是輪到 1 號 , 再接下來的並不是 3 號,因為 2 號和 4 號剛才己經自殺身亡了, 我們這次不算他們,所以下一個是跳過 3 號的 5 號 ,依此類推。數學家不想平白死掉,但是又怕族人笑他懦弱,因此,他立即算出自己應該站在那一位置才是最後輪到的,如此他就不必犧牲了。我們不來評斷數學家的勇氣 , 僅就其數學層面來看,以一般的討論來看 , 我們假設有 N 人排成一圈 , 每二人退出圈 , 用 L ( N )表示最後留下來的人。

輸入說明:

ex:

輸入 input.txt 含總人數 N

13

結果 L(13) 請寫入 output.txt

11

輸出輸入測試資料

1

1

3

3

4

1

9

3

10

5

11

7

13

11

這題是基本的腦力激盪題,遇到這題我希望大家先知道這題要做什麼,推算出這題的規律。

我先把這題解完吧~~簡單喔,找規律偷吃步!!

  1. #include<iostream>  
  2.  
  3. using namespace std;  
  4.  
  5. int main()  
  6. {  
  7.     int people;  
  8.  
  9.     cin>>people;  
  10.  
  11.     int live=0;  
  12.  
  13.     for(int i=1;i<=people;i++)  
  14.  
  15.     live=(live+2)%i;  
  16.  
  17.     cout<<live+1<<endl;  
  18. }

一眼就看出來是帶入簡單數學公式就可以解開咯(030)

如果還是看不懂的話,在for裡面把live cout 出來 ,就一目瞭然喔 (>3<)/

 

問題來源:https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=6432

end

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 佑佑 的頭像
    佑佑

    佑佑的語言

    佑佑 發表在 痞客邦 留言(0) 人氣()