唯一註解:此處不用推導出的公式。而是利用佇列的方法,直接將報號為指定數字前的資料壓入到佇列結尾,如此往復迴圈,則可以輸出正確結果
//約瑟夫環(約瑟夫問題)是乙個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。
#include//佇列方法一直將資料用佇列迴圈即可
#includeusing namespace std;
int main()
while(!q.empty())
printf("%d ",q.front());//輸出當前報號為m的編號
q.pop();//彈出此資料
} printf("\n");
}return 0;
}
華為機試 約瑟夫問題
約瑟夫問題1 一組人 n個 圍成一圈,從某人開始數到第三個的人出列,再接著從下乙個人開始數,最終輸出最終出列的人 約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 ...
機試真題 小朋友報數問題 約瑟夫環
沒啥難度,還是難以判斷測試用例的問題,也就是k是否大於10,否則就會採用字串進行判斷 include include include includeusing namespace std int n,k struct node queueque vectorvec bool charge int m...
華為機試 約瑟夫環換m值
問題描述 輸入乙個由隨機數組成的數列 數列中每個數均是大於0的整數,長度已知 和初始計數值m。從數列首位置開始計數,計數到m後,將數列該位置數值替換計數值m,並將數列該位置數值出列,然後從下一位置從新開始計數,直到數列所有數值出列為止。如果計數到達數列尾段,則返回數列首位置繼續計數。請程式設計實現上...