救济金发放,紫书P82UVa133

来源:互联网 发布:探索者结构设计软件 编辑:程序博客网 时间:2024/05/17 12:54

(变量-1)%n+1巧妙的完成了正向遍历循环
(变量+n-1)%n+1在不影响正向遍历循环的情况下,巧妙的实现了负向遍历循环

// UVa133 The Dole Queue// Rujia Liu#include<stdio.h>#define maxn 25int 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,否则无法实现循环

原创粉丝点击