#145-(EZOI模拟练习)[模拟]保龄球

版权声明:反正也没有人会转,下一个 https://blog.csdn.net/drtlstf/article/details/83311250

Description

打保龄球是用一个滚球去打击十个站立的柱,将柱击倒。一局分十轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。一局得分为十轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还可能与后续一两轮的滚球情况有关。即某轮某次滚球击倒的柱数不仅要计入本轮得分,还可能会计入前一两轮得分。具体的滚球击柱规则和计分方法如下:
(1) 若某一轮的第一次滚球就击倒全部十个柱,则本轮不再滚球(若是第十轮则还需另加两次滚球,不妨称其为第十一轮和第十二轮,并不是所有的情况都需要滚第十一轮和第十二轮球)。该轮得分为本次击倒柱数 10 与以后两次滚球所击倒柱数之和。
(2) 若某一轮的第一次滚球未击倒十个柱,则可对剩下未倒的柱再滚球一次。如果这两次滚球击倒全部十个柱,则本轮不再滚球(若是第十轮则还需另加一次滚球),该轮得分为这两次共击倒柱数 10 与以后一次滚球所击倒柱数之和。
(3) 若某一轮两次滚球未击倒全部十个柱,则本轮不再继续滚球,该轮得分为这两次滚球击倒的柱数之和。
总之,若某一轮中一次滚球或两次滚球击倒十个柱,则本轮得分是本轮首次滚球开始的连续三次滚球击倒柱数之和(其中有一次或两次不是本轮滚球)。若一轮内二次滚球击倒柱数不足十个,则本轮得分即为这两次击倒柱数之和。下面以实例说明如下:
轮         1    2   3   4      5     6       7     8      9   10   11   12
击球情况   /    /    /  72    9/    81     8/      /     9/      /    8/
各轮得分 30 27  19   9    18     9     20   20    20   20
累计总分 30 57  76 85  103  112  132 152  172  192
现在请编写一个保龄球计分程序,用来计算并输出最后的总得分。

Input

输入一行,为前若干轮滚球的情况,每轮滚球用一到两个字符表示,每一个字符表示一次击球,字符“/”表示击倒当前球道上的全部的柱,否则用一个数字字符表示本次滚球击倒的当前球道上的柱的数目,两轮滚球之间用一个空格隔开。

Output

输出一行一个整数,代表最后的得分。

Sample Input

【输入样例 1】
/ / / 72 9/ 81 8/ / 9/ / 8/

【输入样例 2】
90 90 / 9/ 81 / / / 72 / /0

【输入样例 3】
/ / / 72 9/ 81 8/ / 9/ 15

Sample Output

【输出样例 1】
192

【输出样例 2】
170

【输出样例 3】
169

也是模拟啊

#include <iostream>
#include <string>

#define SIZE 210

using namespace std;

string s[SIZE];
int hit[SIZE][2], score[SIZE];

int main(void)
{
	int n = 1, i, res = 0;
	
	while (cin >> s[n])
	{
		++n;
	}
	
	--n;
	for (i = 1; i <= n; ++i)
	{
		if (s[i][0] == '/')
		{
			hit[i][0] = 10;
		}
		else if (s[i][1] == '/')
		{
			hit[i][0] = s[i][0] - '0';
			hit[i][1] = 10 - hit[i][0];
		}
		else
		{
			hit[i][0] = s[i][0] - '0'; // 每轮的击中数
			hit[i][1] = s[i][1] - '0';
		}
	}
	for (i = 10; i; --i)
	{
		if (s[i][0] == '/') // 第一次就全部击中
		{
			score[i] = hit[i+1][0] + ((s[i+1].size() < 2) ? hit[i+2][0] : hit[i+1][1]) + 10;
		}
		else if (s[i][1] == '/') // 第二次全部击中
		{
			score[i] = hit[i+1][0] + 10;
		}
		else // 没有全部击中
		{
			score[i] = hit[i][0] + hit[i][1];
		}
		res += score[i];
	}
	
	printf("%d", res);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/drtlstf/article/details/83311250
今日推荐