PTA 約瑟夫環(猴子選大王) 詳解

2021-09-28 13:27:00 字數 1057 閱讀 1445

n個人圍成一圈順序編號,從1號開始按1、2、3…順序報數,報p者退出圈外,其餘的人再從1、2、3開始報數,報p的人再退出圈外,以此類推。 請按退出順序輸出每個退出人的原序號。

輸入格式:

輸入只有一行,包括乙個整數n(1<=n<=3000)及乙個整數p(1<=p<=5000)。

輸出格式:

按退出順序輸出每個退出人的原序號,資料間以乙個空格分隔,但行尾無空格。

輸入樣例:

在這裡給出一組輸入。例如:

7 3輸出樣例:

3 6 2 7 5 1 4

```c

#include#includetypedef int status; //設定函式的返回型別為int

typedef int elemtype; //設定元素資料型別為int

typedef struct lnode //定義結點結構

lnode,*linklist; //命名為lnode和指標型linklist

linklist initlist(int t) //構造鍊錶的函式,返回值為乙個結點的指標

l->data=t; //最後乙個結點的資料域賦值

l->next=s; //最後乙個結點的指標域指向第乙個結點

return s; //將第乙個結點的位址返回

}status deleteelem(linklist &l) //刪除需要刪除的結點,l為需要刪除的結點的位址

int main(void)

printf("%d ",l->data); //將需要退出的人對應的結點輸出

deleteelem(flag); //刪除需要退出的人的結點

} else //當k不為1的時候,計數j次再對應刪除

printf("%d ",l->data);//先輸出

deleteelem(flag); //再刪除

} }printf("%d",l->next->data);//最後乙個後面不能有空格

}

PTA 猴子選大王 (約瑟夫環問題)

一群猴子要選新猴王。新猴王的選擇方法是 讓n只候選猴子圍成一圈,從某位置起順序編號為1 n號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下乙隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的乙隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?輸入在一行中給乙個正整數n 10...

PTA7 28 猴子選大王(約瑟夫環)

一群猴子要選新猴王。新猴王的選擇方法是 讓n只候選猴子圍成一圈,從某位置起順序編號為1 n號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下乙隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的乙隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?輸入在一行中給乙個正整數n 10...

猴子選大王問題(約瑟夫環)

一群猴子排成一圈,按1,2,n依次編號。然後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去 如此不停的進行下去,直到最後只剩下乙隻猴子為止,那只猴子就叫做大王。要求程式設計模擬此過程,輸入m n,輸出最後那個大王的編號。function monkey monke...