以下三個問題都屬於同型別的問題,其中兩道題目是助教時的實驗題,還有一道是華為在成都招聘時的機試題目。
在這三個問題中,問題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.繼續此過程...