首页 > 代码库 > UESTC OJ 25
UESTC OJ 25
Input
输入包含多组数据。每组数据的第一行包含一个整数N(1≤N≤18),表示双方总共罚了多少个点球,N=0表示输入结束。随后有N行,每行是一个如下形式的字符串:
XXXX good
:表示这个点球罚进
或者XXXX no good
:表示这个点球没有罚进
其中XXXX
表示球员名字(全部由字母和空格组成,保证不会出现歧义)
每一行保证不超过100个字符。
XXXX
和good
以及XXXX
和no
、no
和good
之间保证有且只有1个空格。
good
、no 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; }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。