Posted on 2012-03-02 17:09
C小加 阅读(1097)
评论(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;
}