uva 133(The Dole Queue UVA - 133)

一道比较难想的模拟题,用了队列等东西,发现还是挺难做的,索性直接看了刘汝佳的代码,发现还是刘汝佳厉害!

代码本身难度并不是很大,主要还是p=(p+n+d-1)%n+1;这一句有些难度,实际上经过自己的手动计算发现这一句真的是相当的正确,虽然无法准确的说明。

剩下的就是格式问题这个题很特别的只能用%3d的格式,我起初还不理解10前面为什么只有一个空格,还以为是题目打错了,没想到这就是要你%3d的意思。

我自己敲一遍的代码

#include <bits/stdc++.h>
using namespace std;
int n,k,m;
int a[30];
int go(int p,int d,int t)
{
	while(t--)
	{
		do
		{
			p=(p+d+n-1)%n+1;
		}while(a[p]==0);
	}
	return p;
}
main()
{
	while(cin>>n>>k>>m&&n)
	{
		 for(int i=1;i<=n;i++)
		 a[i]=i;
		 int left=n;int p1=n;
		 int p2=1;
		 while(left)
		 {
		 	p1=go(p1,1,k);
		 	p2=go(p2,-1,m);
		 	printf("%3d",p1);
		 	left--;
		 	if(p2!=p1)
		 	{
				printf("%3d",p2);
		 		left--;
		 	}
		 	a[p1]=a[p2]=0;
		 	if(left)
		 	cout<<",";
		 }
		 cout<<endl;
	}
}
posted @ 2018-10-16 09:28  baccano!  阅读(291)  评论(0编辑  收藏  举报