1. 程式人生 > >迴圈佇列 約瑟夫問題

迴圈佇列 約瑟夫問題

約瑟夫問題

Time Limit: 1000MS Memory limit: 65536K

題目描述

n個人想玩殘酷的死亡遊戲,遊戲規則如下: 

n個人進行編號,分別從1到n,排成一個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的一個人是勝利者。

請輸出最後一個人的編號。

輸入

輸入n和m值。

輸出

輸出勝利者的編號。

示例輸入

5 3

示例輸出

4

提示

第一輪:3被殺第二輪:1被殺第三輪:5被殺第四輪:2被殺 #include<stdio.h> #define MAX 100 int front=MAX-1;
int rear=MAX-1; void enqueue(int q[],int x)//入隊演算法 { rear=(rear+1)%MAX; q[rear]=x; } int dequeue(int q[])//出隊演算法 { front=(front+1)%MAX; return q[front]; } int main() { int m,i,n; int q[MAX],k=0,y; scanf("%d%d",&m,&n); for(i=1;i<=m;i++) enqueue(q,i); while(front!=rear) { y=dequeue(q);
k++; if(k%n==0) continue; else enqueue(q,y); } printf("%d\n",y); return 0; }