首页 > 代码库 > UESTC OJ 25

UESTC OJ 25

Input

输入包含多组数据。每组数据的第一行包含一个整数N(1N18),表示双方总共罚了多少个点球,N=0表示输入结束。随后有N行,每行是一个如下形式的字符串:

XXXX good:表示这个点球罚进

或者XXXX no good:表示这个点球没有罚进

其中XXXX表示球员名字(全部由字母和空格组成,保证不会出现歧义)

每一行保证不超过100个字符。

XXXXgood以及XXXXnonogood之间保证有且只有1个空格。

goodno good都是小写。本题是大小写相关的。

数据不保证点球大战一定结束,也不保证在结束以后立即结束这组数据(即:不用判断点球大战是否结束,只用把罚进的点球往比分上加即可)。

Output

对每组数据,输出一个比分板。一个点球如果罚进,则在对应的地方标上O,如果没有进则标上X。先罚球的队伍的信息在上面,后罚的在下面。最右边标上两队的比分。具体格式参考样例输出。注意如果一轮点球只罚了一个,则后面那个点球对应的地方写上-

解决思路

这个题解决思路倒是很简单,主要要多考虑两个因素

(1)如果一个人名最后两位为no,例如abcno good,则应该

(2)如果一个人名中包括no good,例如 abc no good good,则应该是点球罚进。

因此解决思路是判断输入长度是否大于8,小于8肯定是进了,大于8则取字符串最后8个字符的子串与" no good"进行比较,若相等则点球未罚进,否则该点球罚进。

代码如下:

#include <iostream>#include <string>using namespace std;int main(){    int testCases, lines, firstTeamGoal, secondTeamGoal;    string goalInfo, firstTeam, secondTeam;    cin >> testCases;        while (testCases != 0){        lines = 0;        firstTeam = secondTeam = "";        firstTeamGoal = secondTeamGoal = 0;                getline(cin, goalInfo);        while (lines < testCases){                        getline(cin, goalInfo);            int len = goalInfo.size();                        if (len >= 8){                if (goalInfo.substr(len - 8, 8) == " no good"){                    if (lines % 2 == 0)                        firstTeam += "X ";                    else                        secondTeam += "X ";                }                else{                    if (lines % 2 == 0){                        firstTeamGoal++;                        firstTeam += "O ";                    }                    else{                        secondTeamGoal++;                        secondTeam += "O ";                    }                }            }            else{                if (lines % 2 == 0){                    firstTeamGoal++;                    firstTeam += "O ";                }                else{                    secondTeamGoal++;                    secondTeam += "O ";                }            }            lines++;        }        if (testCases % 2 == 1)            secondTeam += "- ";                for (int i = 0, len = (testCases + 1) / 2; i < len; i++)            cout << i+1 << " ";        cout << "Score" << endl << firstTeam << firstTeamGoal << endl << secondTeam <<secondTeamGoal<< endl;        cin >> testCases;        }}