時間限制: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 #include3using
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 #include4 #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 人,就在今天了!為了慶賀這個幸運...