救濟金髮放,紫書P82UVa133
阿新 • • 發佈:2018-12-26
(變數-1)%n+1巧妙的完成了正向遍歷迴圈
(變數+n-1)%n+1在不影響正向遍歷迴圈的情況下,巧妙的實現了負向遍歷迴圈
// UVa133 The Dole Queue
// Rujia Liu
#include<stdio.h>
#define maxn 25
int n, k, m, a[maxn];
int go(int p, int d, int t) {
while(t--) {
do { p = (p+d+n-1) % n + 1; } while(a[p] == 0);//整個程式最核心的語句,迴圈啊遍歷的最核心演算法
}//(變數-1)%n+1巧妙的完成了正向遍歷迴圈
// (變數+n-1 )%n+1在不影響正向遍歷迴圈的情況下,巧妙的實現了負向遍歷迴圈
return p;
}
int main() {
while(scanf("%d%d%d", &n, &k, &m) == 3 && n) {
for(int i = 1; i <= n; i++) a[i] = i;
int left = n;
int p1 = n, 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) printf(",");
}
printf("\n");
}
return 0;
}
注意:負向遍歷的時候絕對不能超過-n,否則無法實現迴圈