POJ2359(约瑟夫环)

解题思路:题目虽然很长,其实就是一个约瑟夫环问题,对于输入的字符串,从开始依次进行报数,当报到N=1999时,删除对应的字符,字符串可以看作是首尾相连的环,直到剩余最后一个字符。如果剩余字符为'?',则输出结果:Yes;如果剩余字符为' ',则输出结果:No;否则输出结果:No comments .

注意:本题只有一组测试数据,如果写成输入多组的形式,会超时的。

View Code
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4  using  namespace std;
 5  const  int N= 1999;
 6  char str[ 30005];
 7  int main()
 8 {
 9      int i,t,k= 0;
10      char ch;
11      while((ch=getchar())!=EOF)
12     {
13          if(ch!= ' \n ')
14             str[k++]=ch;
15     }
16     t= 0;
17      for(i= 2;i<=k;i++)
18        t=(t+N)%i;
19      if(str[t]== ' ? ') cout<< " Yes "<<endl;
20      else  if(str[t]== '   ') cout<< " No "<<endl;
21      else cout<< " No comments "<<endl;
22      return  0;
23 }

你可能感兴趣的:(约瑟夫环)