基本上采用了模拟的方法,就是每到一个'O',就开始统计以此为起点的这串连续的'O'能的几分。
另外有一些注意的地方写在代码的注释里
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int MAXN = 80 + 10; char s[MAXN]; // c从此位置开始有几个连续的'O' int getSubScore( char **p ) { // 写 char *p 程序会出错 int counter = 0; int i = 0; while( **p=='O' && **p!=' ' ) { i ++; counter += i; (*p) ++; } return counter; } int main() { int counter; int T; cin >> T; while( T-- ) { cin >> s; char *p = s; counter = 0; while( *p!=' ' ) { if( *p == 'O' ) { counter += getSubScore( &p ); // 此处不能再跟 p ++, 因为在上一函数里已经移动了 指针p // 可能此时 p 已指向' ', 再加 p ++可能出错 } else { p ++; } } cout << counter << endl; } return 0; }