zoukankan      html  css  js  c++  java
  • UVA133

    题意:

    n个人围成个圆,从1到n,一个人从1数到k就让第k个人离场,了另一个人从n开始数,数到m就让第m个人下去,直到剩下最后一个人,并依次输出离场人的序号。

    水题,直接上标程了

    #include<stdio.h>
    #define maxn 25
    int n, k, m, a[maxn];
    
    // 逆时针走t步,步长是d(-1表示顺时针走),返回新位置
    int go(int p, int d, int t) {
      while(t--) {
        do { p = (p+d+n-1) % n + 1; } while(a[p] == 0); // 走到下一个非0数字
      }
      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("
    ");
      }  
      return 0;
    }
  • 相关阅读:
    学习笔记4
    学习笔记2
    学习笔记1
    树莓派与Arduino串口通信
    团队大作业第三周周报
    团队大作业第二周周报
    团队大作业第一周周报
    RTCSD_第三次作业
    RTCSD_第二次作业
    RTCSD_第一次作业
  • 原文地址:https://www.cnblogs.com/aerer/p/9930966.html
Copyright © 2011-2022 走看看