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;

}

 

你可能感兴趣的:(core)