C小加

厚德 博学 求真 至善 The bright moon and breeze
posts - 145, comments - 195, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Ural 1098. Questions 解题报告

Posted on 2012-03-02 17:09 C小加 阅读(1092) 评论(0)  编辑 收藏 引用 所属分类: 解题报告

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

#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;
 }

 


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理