UVA - 133 The Dole Queue
来源:互联网 发布:中联软件 编辑:程序博客网 时间:2024/06/08 04:26
题目大意:N 个人围成环逆时针编号,逆时针从 1 开始数第 m 个出列,顺时针从 N 开始数第 k 个人出列,若数到同一个人,出列一次。下一轮从当前位置开始数,直至所有人出列。输出编号,宽度 3。
解题思路:编号,循环查找,下标到 0 时改为 N,为 N+1 时改为 1,使数组头尾连接。出列后编号改为 0,计数时跳过,注意要两个都找到再判断是否相同,输出。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<ctype.h>using namespace std;int queue[25];int main() { int N, k, m; while (scanf("%d%d%d", &N, &k, &m) != EOF) { if (N == 0 && k == 0 && m == 0) break; for (int i = 1; i <= N; i++) queue[i] = i; int a = 0, b = N + 1; while(1) { for (int i = a + 1, j = 0; ; i++) { if (i == N+1) i = 1; if (queue[i] != 0) j++; if (j == k) { a = queue[i]; break;} } for (int i = b - 1, j = 0; ; i--) { if (i == 0) i = N; if (queue[i] != 0) j++; if (j == m) { b = queue[i]; break;} } if (a == b) { printf("%3d", a); queue[a] = 0; } else { printf("%3d%3d", a, b); queue[a] = 0; queue[b] = 0; } int tag = 1; for (int i = 1; i <= N; i++) if (queue[i] != 0) tag = 0; if (tag) break; printf(","); } printf("\n"); }return 0;}
0 0
- UVa 133 The Dole Queue
- Uva 133 The Dole Queue
- uva 133 - The Dole Queue
- uva-133 - The Dole Queue
- UVa 133 - The Dole Queue
- uva 133 The Dole Queue
- UVa 133 - The Dole Queue
- UVa 133 - The Dole Queue
- uva 133 - The Dole Queue
- uva-133 The Dole Queue
- UVA 133 The Dole Queue
- UVa 133 - The Dole Queue
- uva 133 - The Dole Queue
- uva 133 The Dole Queue
- UVa 133 The Dole Queue
- uva 133 - The Dole Queue
- uva 133 - The Dole Queue
- UVa 133 - The Dole Queue
- 基础数学1004 LightOJ 1336
- GCC简明教程(2)
- spark-submit 提交 spark-examples-1.6.1-hadoop2.6.0.jar
- Hdu 5451 Best Solver(快速幂取模+循环节) -2015 ACM-ICPC沈阳网赛1002
- 杂记
- UVA - 133 The Dole Queue
- 基础数学1005 LightOJ 1282
- 压缩感知重构算法之基追踪(Basis Pursuit, BP)
- PROJ4编译与使用(Windows平台)
- ORACLE的检查点(checkpoint)
- 【 Codeforces 612B 】 HDD is Outdated Technology
- 基础数学1006 LightOJ 1245
- C++ 用libcurl库进行http通讯网络编程
- 【日常练习 DP入门】HDU 1176免费馅饼(数塔变式)