zoukankan      html  css  js  c++  java
  • poj 3750 小孩报数问题 解题报告

    题目链接:http://poj.org/problem?id=3750

          约瑟夫问题,直接模拟即可。

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 const int maxn = 65;
     6 
     7 int main()
     8 {
     9     char ch;
    10     int i, n, w, s, num[maxn];
    11     string per[maxn];
    12     while (scanf("%d", &n) != EOF)
    13     {
    14         for (i = 0; i < n; i++)
    15         {
    16             cin >> per[i];   // 保存人名
    17             num[i] = i;       // 保存人名所对应的编号
    18         }
    19         cin >> w >> ch >> s;
    20         w = w - 1;  // 严谨写法应为:w = (w-1+n) % n,但题目说w < n,所以这样写也能通过,表示游戏刚开始时第一个报数人的编号,数组下标是从0开始的
    21         do
    22         {
    23     //        printf("n = %d\n", n);
    24             w = (w + s - 1) % n;   // 得出从第w个开始的第s个位置,如果超出n,则mod n 来保证循环
    25 cout << per[num[w]] << endl; // 该人出列 26 for (i = w; i < n-1; i++) 27 per[i] = per[i+1]; // 后面的人顶上出列的人的位置,即都往前挪 28 } while (--n); // 注意是--n,n--是错误的!! 29 } 30 return 0; 31 }

         

  • 相关阅读:
    JSOI2010 满汉全席
    LNOI2014 LCA
    BZOJ3689 异或之
    Codeforces Round #553 div.2
    AHOI2013 差异
    SDOI2016 生成魔咒
    NOI2006 最大获利
    没有过的题QAQ
    NOI2014 动物园
    HDU4622 Reincarnation
  • 原文地址:https://www.cnblogs.com/windysai/p/3308982.html
Copyright © 2011-2022 走看看