UVa 133 - The Dole Queue
2013-04-17 15:24
477 查看
循环队列,本来要用链表模拟,可是因为是同时删除两个节点,而在模拟时后删除的节点可能会影响先删除的节点(删除第一个节点后指针指向下一个节点,而该节点如果是要删除的第二个节点的话指针还要移动),感觉有点麻烦,就用数据模拟了,反正数据也不大。
代码如下:
View Code
开始把int first = 1; 写到最外面了,结果后面的输出每行都是以一个逗号开头,让我WA的不明不白,后来突然发现了这个问题。一直用它给的样例测试,看来以后如果只给一个样例输入的话,还是要多测试一下的,不能太懒了,多复制粘贴几下也好啊,最起码也有了好几组数据呢。
代码如下:
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的不明不白,后来突然发现了这个问题。一直用它给的样例测试,看来以后如果只给一个样例输入的话,还是要多测试一下的,不能太懒了,多复制粘贴几下也好啊,最起码也有了好几组数据呢。
相关文章推荐
- UVa133 - The Dole Queue
- The Dole Queue UVA - 133
- UVa133 - The Dole Queue
- 救济金发放 (The Dole QUEUE UVa 133)
- uva133 The Dole Queue 循环队列模拟
- 救济金发放The Dole QueueUVA 133
- UVa 133 - The Dole Queue
- uva 133 - The Dole Queue
- uva-133 The Dole Queue
- uva133(The Dole Queue)—线性表
- UVa 133 - The Dole Queue
- UVa133 The Dole Queue
- The Dole Queue(UVA 133)
- Uva 133 The Dole Queue 双向约瑟夫环
- UVA 133 The Dole Queue
- UVa-133 The Dole Queue
- uva-133 - The Dole Queue
- UVa133 - The Dole Queue
- uva133救济金发放The Dole Queue
- uva - 133 The Dole Queue(成环状态下的循环走步方法)