Ural 1098. Questions 解题报告

题看不懂,在网上找到的翻译。就是整个串(不是整行)的约瑟夫环。

#include<iostream>
#include<cstdio>
  using  namespace std;

char str[30003];
int Josephus( int n, int m, int k )  // 分别为:人数,出圈步长,起使报数位置,
 {
      int x=1;
     
      if (m == 1)
         k = k == 1 ? n : (k + n - 1) % n;
              else{
                  for ( int i = 1; i <= n; i++)
                 {
                      if ((k + m) < i)
                     {
                         x = (i - k + 1) / (m - 1) - 1;
                          if (i + x < n){
                             i = i + x;
                             k = (k + m * x);
                         }
                          else{
                             k = k + m * (n - i) ;
                             i = n;
                         }
                    }
                    k = (k + m - 1) % i + 1;
                }
           }
       return k;  // 返回最后一人的位置
 }

  int main()
 {
      // freopen("in.txt","r",stdin);
      int len=0;
     while(scanf("%c",&str[0])!=EOF)
    {
         if(str[0]>=' ')
        str[++len]=str[0];
    }
     int k=Josephus(len,1999,1);
     if (str[k]=='?')
    printf("Yes\n");
     else  if (str[k]==' ')
    printf("No\n");
      else
      printf("No comments\n");


      return 0;
 }

 

你可能感兴趣的:(Ural 1098. Questions 解题报告)