助教c c n個人圍成一圈報數問題

2021-06-21 15:18:58 字數 1151 閱讀 4617

以下三個問題都屬於同型別的問題,其中兩道題目是助教時的實驗題,還有一道是華為在成都招聘時的機試題目。

在這三個問題中,問題1考慮的最簡單,用指標實現;問題2考慮最全面,用結構體實現;問題3用到了函式。

問題1:有n個人圍成一圈,順序排號。從第乙個人開始報數,凡報到3的人退出圈子,問最後留下的是幾號?

源程式:

#include#define max 15

int main()

;struct child link[n];

void main()

count=0;

if(s==1)h=n;

else h=s-1;

//如果從1號開始報數,1號的前一位是n號。如果從s開始報數,s的前一位是s-1號。

printf("出圈順序為:");

問題3:#華為機試#

計算最後乙個出列者的編號 

描述: 現在有n個競爭者圍坐一圈,爭奪乙個很有吸引力的工作(年薪100w $)。假設這些人編號1,2,。。。,n。第一次從1開始報數,數到m(m>0)的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列。以此類推,直到所有人出列為止。老闆說最後乙個出列的人將獲得這份工作。

如果你也想競爭這份工作,那麼你會坐著哪個位置上?

實現乙個函式,當老闆告訴你n和m時,返回得到工作的那個人的編號。

執行時間限制: 無限制 

記憶體限制: 無限制 

輸入: 競爭者人數,報數

輸出: 最後出列的競爭者的編號。異常則返回 -1。

樣例輸入: 10,10 

樣例輸出: 8 

源程式:

#includevoid main()

int search(int n,int m)

{ int num[20];int *p=num;

int i,j,k,count,h,lucky=-1;

for(i=0;i執行結果:

多人圍成一圈報數問題!

題目 摘自譚浩強的c語言 有n個人圍成一圈,順序排號。從第乙個人開始報數 從1到3報數 凡報到3的人退出圈子,問最後留下的是原來第幾號的那個人。解法思路 首先不要將思維侷限在一圈人,可以先將n個人看做一排,即作為乙個陣列,為這個陣列的每乙個元素 即人 編號,第0個人就編號1,以此類推。有了編號之後可...

n人圍成一圈報數問題

題目 有n個人圍成一圈,順序排號。從第乙個人開始報數 從1到3報數 凡報到3的人退出圈子,問最後留下的是原來第幾號的那位。思路 假如是8人,則需要乙個陣列將8個人的從1到8依次記下每人位數,還需要乙個模擬報數口令的變數該變數最初為0,從1到2在到3,當該變數為3時,此時對應編號的人就要退出 那麼第一...

C語言 N個人圍成一圈報數淘汰問題

一 問題描述 有17個人圍成一圈 編號為0 16 從第 0號的人開始從 1報數,凡報到 3的倍數的人離開圈子,然後再數下去,直到最後只剩下乙個人為止。問此人原來的位置是多少號?二 問題解決 1.定義陣列記錄每個編號的狀態 是否被淘汰 2.在未被淘汰的人中檢查是否數到3,若是,淘汰此人 3.繼續此過程...