計蒜客 報數 (隊列的使用)

nnn 個小朋友做遊戲,他們的編號分別是 1,2,3...n1,2,3...n1,2,3...n。他們按照編號從小到大依次順時針圍成一個圓圈,從第一個小朋友開始從 111 報數,依次按照順時針方向報數(加一),報 mmm 的人會離開隊伍,然後下一個小朋友會繼續從 111 開始報數,直到只剩一個小朋友爲止。

輸入格式

第一行輸入倆個整數,nnnmmm。(1≤n,m≤10001 \leq n,m \leq 10001n,m1000

輸出格式

輸出最後一個小朋友的編號,佔一行。

樣例輸入

10 5

樣例輸出

 3

#include <iostream>
#include <stdio.h>
#include <string.h> 
#include <algorithm>
#include <queue>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
queue <int> q;
void a(int n,int m)
{
	int b[1002],p=0;
	if(n==1)
	{
		printf("%d",q.front());
		return ;
	}
	
	for(int i=1;i<=m;i++)
	{
		if(i==m)
		{
			q.pop();
			a(n-1,m);
		}
		b[++p]= q.front();
		q.pop();
		q.push(b[p]);	
	}
}
int main(int argc, char *argv[])
 {
 	int n,m;
 	scanf("%d%d",&n,&m);
 	for(int i=1;i<=n;i++)
 	{
 		q.push(i);
 	}
 	a(n,m);
	return 0;
}
 

發佈了45 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章