題型描述
n 個人圍成一圈,從第一個人開始報數,報到 m 的人出圈,再由下一個人重新從 1 開始報數,數到 m 的人再出圈,依此類推,直到所有人都出圈,
該問題需要 輸出依次出圈人的編號 或 直接輸出最后一個出圈人的編號,
解題思路
1.陣列模擬
將 n 個人的編號存入陣列,從第一個人開始報數,輸出報數 m 的人的編號,并將該編號清零(表示出圈),在之后的每次報數之前要判斷是否在圈內,重復這樣的操作直至出圈的人數等于 n ,
#include<stdio.h>
int main()
{
int n,m,i,num=0,count=0;
int a[120];
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
a[i]=i;
}/*存入編號*/
for(i=1;;i++){
if(a[i]!=0){
num++;/* num 表示計數器*/
if(num==m){
count++;
if(count==n){
break;
}
printf("%d ",a[i]);
a[i]=0;
num=0;
}/* 報數為 m 出圈:
出圈人數加一,輸出編號,編號清零,計數器清零*/
}
if(i==n){
i=0;
}
}
printf("%d",a[i]);
return 0;
}
2.鏈表模擬
3.數學推導公式
(直接得到最后一個出圈人的編號)->待學習
參考資料:用一行代碼解決約瑟夫環問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/45014.html
標籤:C
上一篇:第五部分、陣列
下一篇:C語言入門理解指標
