圓圈中的無憂位與絕望位

2021-05-25 06:19:12 字數 1089 閱讀 2781

1.問題提出

學院某系要在本系154個同學中選派一半同學即77人參加夏令營,由於報名踴躍,爭執不下,系學生會主席王小明提議實施按學號圍圈、報數淘汰的辦法實施篩選:同學們學號為1,2,。。,154,按學號順序逆時針方向圍成一圈。小明的學號為1號,從1號開始逆時針方向1,2,。。。,報數,凡報數m者出圈淘汰,如此繼續報數淘汰。直到最後剩下77人確定參加夏令營。

為了確保公正,報數數m由通常搖雙骰子確定,兩個色子點之和(顯然為區間[2,12]中的正整數]確定為報數數m。他具體舉例說,例如雙色子點數之和為8,即按1,2,3.。。8逆時針方向沿圈報數,凡報數8者出圈淘汰。

系計算機興趣小組3位程式設計高手在計算這一選派方法後有人歡喜有人愁。小林認為他幸運佔據了乙個無憂位:無論m在2,3,。。。,12中取什麼數,他都能確保不被淘汰出局。不陳學號比小林大,他也是無憂位。小張則直叫不好,他說他是乙個絕望位:無論m在2,3,。。。,12中取什麼數,他都將被淘汰出局。請問:

①小林、小陳與小張的學號分別是什麼編號?

②如果把人數拓廣到任意三位偶數時,按這一篩選一半同學的方法,當學生數為多少時小明1號是無憂位?當學生數為多少時小明的1號是絕望位?

2.設計思路

設定陣列a[n],第一陣列賦初值1。同時設定報數數m(2~12)迴圈,對每乙個m實施報數,每報數一人,變數w增1.當加a(i)後變數w的值為m時,置a(i)=0,標誌編號為i者出圈。設定y統計出圈人數。同時,w=0並重新逆時針方向後報數累加。

當編號i增至n+1時則i=1。

當出圈人數y達到n/2人時,即未出圈者只剩n/2人,終止報數。

然後應用陣列s(i)統計出局的編號i的次數,s(i)的值都初始化為11,在報數的過程中,若i號則s(i)--。對於m=2,3,...,12這11個數,若s(i)=11(即面臨11個報數數,每次都未被淘汰),位轉即為無憂位;若s(i)=0(即面臨11個報數,每次都被淘汰),位置i即為絕望位。

3.**實現

4.對指定區間內偶數人時指定編號為無憂位與絕望位探索

在以上無憂位與絕望位設計的基礎上,增加乙個人數n迴圈。對於n人中的第x號位,如果m取2,3,。。。,12這11個數被淘汰,即s(x)=0,人數n作絕望位列印輸出。

5.**

轉《趣味c程式設計集錦》

位與的用法

求下面函式的返回值 微軟 int func x return countx 假定x 9999。答案 8 思路 將x轉化為2進製,看含有的1的個數。求下面函式的返回值 微軟 統計1的個數 int func int x return countx 假定x 9999 10011100001111 答案 8...

php 位運算與許可權,PHP中的位運算和進製處理

php中的位運算和進製是比較冷門的知識,感覺很簡單也很好理解,但是在實際場景中卻很少使用,本篇博文就是簡單了解基本概念以及講解如何去實際使用.位運算php中的位運算子是對整形進行的操作,比如對於十進位制,二進位制,八進位制等數字的一些操作.按位與 and 按位或 or 按位取反 not 按位異或 x...

PHP中的按位與和按位或操作示例

按位與主要是對二進位制數操作。如下 複製 如下 php a 1 b 2 c a b echo c 3 這裡不是單純的相加關係 十進位制 1換算成二進位制 00000001 十進位制 2換算成二進位制 00000010 按位pfagbpwvl 00000011 就是不相同的都算成1 啦 然後,複製 如...