The Dole Queue

<h1></h1><span style="font-size:24px;">试题来源UVA 133</span>

 
 
 
 
该题为约瑟夫的变形。
#include <iostream>
#include <cstdio>
using namespace std;
bool visit[25];
int n;
int anticw(int a,int b)//逆时针查找
{
	while(b)
	{
		if(a==n)
		{
		   a=1;
		}
		else
		  a++;
	    if(!visit[a])
		{
			b--;
		}
	}
	return a;
	
}
int cw(int a,int b)//顺时针查找
{
	while(b)
	{
		
		if(a==1)
		{
			a=n;
		}
		else
		  a--;
        if(!visit[a])
		{
			b--;
		}
	}
	return a;
}
int main() 
{
	int k,m;
	int a[25];
	cin>>n>>k>>m;
	while(n||k||m)
	{
	for(int j=0;j<20;j++)
        visit[j]=false;
	for(int i=1;i<n+1;i++)
	    a[i]=i;
	int p,q;
	p=0;
	q=n+1;
	int p1=p,q1=q;
	int len=n;
	while(len)
	{
		p=p1;
		q=q1;
		p1=anticw(p,k);
		q1=cw(q,m);
		if(p1==q1)
		{
			
			//cout<<setw(3)<<p1;
			printf("%3d",p1);
		    if(len!=1)
			  cout<<',';
			len=len-1;
			visit[p1]=true;
		  
		}
		else
		{
		   //cout<<setw(3)<<p1<<setw(3)<<q1;
			printf("%3d%3d",p1,q1);
		   if(len!=2)
		     cout<<',';
		  len=len-2;
		  visit[p1]=true;
		  visit[q1]=true;
		}
		
		
	}
	cout<<endl;
	cin>>n>>k>>m;
	}
    
	return 0;
}

你可能感兴趣的:(The Dole Queue)