Uva1585 Score

基本上采用了模拟的方法,就是每到一个'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!='\0' ) {
        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!='\0' ) {
            if( *p == 'O' ) {
                counter += getSubScore( &p );
                // 此处不能再跟 p ++, 因为在上一函数里已经移动了 指针p
                // 可能此时 p 已指向'\0', 再加 p ++可能出错
            } else {
                p ++;
            }
        }
        cout << counter << endl;
    }
    return 0;
}

 

posted @ 2015-04-18 14:02  Emerald  阅读(215)  评论(0编辑  收藏  举报