1 誰是幸運兒 賽碼網周考(0609)

2022-08-24 01:33:12 字數 1694 閱讀 8053

時間限制:c/c++語言 2000ms;其他語言 4000ms

記憶體限制:c/c++語言 65536kb;其他語言 589824kb

題目描述:

小a是某公司的員工,在一次公司年會上,主持人宣布進行一項遊戲來活躍年會氣氛,遊戲規則如下:n個人隨機站成一排,按照他們所站的順序依次給他們編號從1到n,接下來就從編號為1的人開始,按從左到右的順序每隔一人選出乙個人,選出的這些被淘汰,剩下的需要重新站成一排,其中首尾是接龍的,即如果倒數第二個被淘汰,則隔一人即第乙個人被淘汰,如此迴圈一直到最後剩下兩個人為止,那麼這剩下的最後兩個人就是本場晚會的幸運兒,得到神秘大獎,小a想成為這個幸運兒,請你幫小a算出來開始時他應該站在什麼位置才最終可以成為幸運兒。(3<=n<=50)

輸入開始的進行遊戲的總人數n

輸出第一行是選出順序,第二行是兩名幸運兒的初始位置(按公升序排列),要求位置編號之間用乙個空格空開。

樣例輸入

5樣例輸出

2 4 1

5 3解題思路一:定義鍊錶來儲存,然後讓鍊錶的尾指標的下乙個指向頭,構成環形鍊錶

再從頭開始遍歷,每次輸出p->next,為刪除的內容;p->next = p->next->next,剩兩個結點時,p->next->next = p本身,因此可知迴圈截止條件。輸出剩餘的兩個結點即可

1 #include 2 #include 

3using

namespace

std;

4 typedef struct

list list ;89

intmain()

1026 p->next =head;

27 p =head;

2829

while(p ->next->next !=p)

3035 cout<36 coutelem<<"

"37break;38

}39return0;

40 }

解題思路二:使用set儲存,當set中元素的個數大於2個,執行迴圈,在迴圈中,需要每隔乙個元素刪除乙個,本次要回到頭開始有兩種情況:1、正好遍歷到最後乙個,此時指向頭,再++,2、遍歷到最後乙個的前乙個,下乙個從頭開始。刪除當前訪問的結點

1 #include 2 #include 3 #include 

4 #include 5 #include 67

intmain()816

set::iterator iter =arr.begin();

17 iter++;

18set

::iterator itor =iter;

19while (arr.size() > 2

) 25

else

if (++itor ==arr.end())

28if(arr.size() > 3

)29 cout << *iter << "";

30else

31 cout << *iter <32 arr.erase(*iter);

33 iter =itor;34}

35if (iter ==arr.begin())

38else41}

42return0;

43 }

19級幸運兒的發聲

曾有邪教稱1999 年12月31日是世界末日。當然該謠言已經不攻自破。還有人稱今後的某個世紀末的12月31日如果是星期一則會 有趣的是任何乙個世紀末的年份的12月31日都不可能是星期一 於是 謠言製造商 又修改為星期日 1999年的12月31日是星期五,請問,未來哪 乙個離我們最近的乙個世紀末年即x...

資料結構 XingYunX 幸運兒

資料結構 xingyunx 幸運兒 問題描述 資料輸入 輸入第一行為乙個正整數 n。對於 50 的資料,1 n 1000 對於 80 的資料,1 n 6000 對於 100 的資料,1 n 1000000000 資料輸出 輸出 x。輸入示例 輸出示例5 5 輸入示例 輸出示例6 3 解題思路 思路1...

論壇第20000名幸運兒是誰?

2006年的5 月,51cto.com 的論壇正在逐步走向收穫。雖然有個 五一 長假,但並沒有阻礙論壇的持續發展,尤其到了 5月下旬,論壇以平均每天 300人左右的註冊量持續走高 5月28日我們一上班,發現論壇成員已經接近 19900 人 顯然,論壇突破 20000 人,就在今天了!為了慶賀這個幸運...