您的位置:首页 > 产品设计 > UI/UE

UVa 133 - The Dole Queue

2013-04-17 15:24 477 查看
  循环队列,本来要用链表模拟,可是因为是同时删除两个节点,而在模拟时后删除的节点可能会影响先删除的节点(删除第一个节点后指针指向下一个节点,而该节点如果是要删除的第二个节点的话指针还要移动),感觉有点麻烦,就用数据模拟了,反正数据也不大。

  代码如下:

View Code

#include <cstdio>
using namespace std;

const int maxn = 25;
int a[maxn];
int size;

int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int n, k, m;
while(scanf("%d%d%d", &n, &k, &m) != EOF && !(!n && !k && !m))
{
int first = 1;
for(int i = 0; i < n; i++)
a[i] = i+1;
size = n;
int p = n-1, q = 0;
while(size > 0)
{
for(int cnt = 0; cnt < k; )
{
p = (p+1)%n;
if(a[p])   cnt++;
}
for(int cnt = 0; cnt < m; )
{
q = (q-1+n)%n;
if(a[q])   cnt++;
}
if(first)   first = 0;
else printf(",");
if(p == q)
{
printf("%3d", a[p]);
a[p] = 0;
size--;
}
else
{
printf("%3d%3d", a[p], a[q]);
a[p] = a[q] = 0;
size -= 2;
}
}
printf("\n");
}
return 0;
}


  开始把int first = 1; 写到最外面了,结果后面的输出每行都是以一个逗号开头,让我WA的不明不白,后来突然发现了这个问题。一直用它给的样例测试,看来以后如果只给一个样例输入的话,还是要多测试一下的,不能太懒了,多复制粘贴几下也好啊,最起码也有了好几组数据呢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: