ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

保龄球

2022-07-23 21:00:19  阅读:98  来源: 互联网

标签:得分 击倒 柱数 滚球 score 保龄球 10


时间限制:1秒        内存限制:128M 题目描述

打保龄球是用一个滚球去打击10个站立的柱,将柱击倒。一局分10轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。一局得分为10轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还可能与后序一两轮的滚球情况有关。即某轮某次滚球击倒的柱数不仅要计入本轮得分还可能会计入前一两轮得分。具体的滚球击柱规则和计分方法如下: (1) 若某一轮的第一次滚球就击倒全部10个柱,则本轮不再滚球(若是第10轮则还需另加两次滚球,不妨称其为第十一轮和第十二轮,并不是所有的情况都需要滚第十一轮和第十二轮球)。该轮得分为本次击倒柱数10与以后两次滚球所击倒柱数之和 

(2) 若某一轮的第一次滚球未击倒10个柱,则可对剩下未倒的柱再滚一次。如果这两次滚球击倒全部10个柱,则本轮不再滚球(若是第10轮则还需另加一次滚球),该轮得分为这两次共击倒柱数10与以后一次滚球所击倒柱数之和 (3) 若某一轮两次滚球未击倒全部10个柱,则本轮不再继续滚球,该轮得分为这两次共击倒柱数之和 

总之,若某一轮中一次滚球或两次滚球击倒10个柱,则本轮得分是本轮首次滚球开始的连续三次滚球击倒柱数之和(其中有1次或2次不是本轮滚球)。若一轮内两次滚球击倒柱数不足10个,则本轮得分即为这两次击倒柱数之和。下面实例说明: 

轮           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  

现在请编写一个保龄球计分程序,用来计算并输出最后的总得分

输入描述

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

输出描述

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

样例 输入
/ / / 72 9/ 81 8/ / 9/ / 8/
输出 192 这道题根据题目要求我们可以得知这道题要求我们算保龄球的得分。‘/‘为全部击倒,如果第一轮没有全部击倒那么可以进行第二轮。如果第二轮没有全部击倒剩下的,就不再进行。如果全部击倒,得分为本轮加上后两轮的得分。如果没有,得分为本轮加上下一轮的得分。这道题我们可以用字符串s为滚球情况,sum为得分,n为轮数,二维数组a来存每轮的得分。然后用while(cin>>s)。因为s有空格,所以用while(cin>>s)。在 while循环里,我们要判断s是否为‘/‘。如果为‘/‘,则a[n][0]为10.如果s[1]为‘/‘,那么就让a[n][0]为s[0]-'0',a[n][1]=10-s[1]-'0'。如果s不等于‘/‘,那么让a[n][0]=s[0]-'0',a[n][1]=s[1]-'0'。最后让n++。存完每轮的分数,接下来就该求总分数了。用一个for循环,里面定义一个变量score来存每轮的总份数,让它每次循环都初始化为0。如果a[i][0]等于10,让score等于10+a[i+1][0]+a[i+2][0]或是a[i+1][0]。如果a[i][1]+a[i][0]等于10,就score等于10+a[i][0]的和。如果这些条件都不满足,就让score等于a[i[[0]+a[i][1]的和。在每轮循环结束前,都要让sum加上score,这样才能AC这道题。 AC代码奉上:

#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
int a[21][2]={0},sum=0,n=1;
while(cin>>s){
if(s[0]=='/'){
a[n][0]=10;
}else if(s[1]=='/'){
a[n][0]=s[0]-'0';
a[n][1]=10-a[n][0];
}else{
a[n][0]=s[0]-'0';
a[n][1]=s[1]-'0';
}
n++;
}
for(int i=1;i<=10;i++){
int score=0;
if(a[i][0]==10){
score=10+a[i+1][0]+((a[i+1][0]==10)?a[i+2][0]:a[i+1][1]);
}else if(a[i][1]+a[i][0]==10){
score=10+a[i+1][0];
}else{
score=a[i][0]+a[i][1];
}
sum+=score;
}
cout<<sum;
return 0;
}

标签:得分,击倒,柱数,滚球,score,保龄球,10
来源: https://www.cnblogs.com/zhhyu/p/16513015.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有