题目描述

打保龄球是用一个滚球去打击十个站立的柱,将柱击倒。一局分十轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。一局得分为十轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还可能与后续一两轮的滚球情况有关。即某轮某次滚球击倒的柱数不仅要计入本轮得分,还可能会计入前一两轮得分。具体的滚球击柱规则和计分方法如下:

(1)若某一轮的第一次滚球就击倒全部十个柱,则本轮不再滚球(若是第十轮则还需另加两次滚球,不妨称其为第十一轮和第十二轮,并不是所有的情况都需要滚第十一轮和第十二轮球)。该轮得分为本次击倒柱数10与以后两次滚球所击倒柱数之和。

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

(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

现在请你编写一个保龄球实时计分程序,用来计算和显示某轮结束后的得分情况。若某轮的得分暂时无法算出,则该轮得分不显示。
输入格式

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

如上例对应的输入文件内容为:/ / / 72 9/ 81 8/ / 9/ / 8/
输出格式

共两行,第一行为每轮得分,第二行为到当前轮为止的总得分。每个得分之间用一个空格隔开。
输入输出样例

输入 #1

/ / / 72 9/ 81 8/ / 9/ / 8/

输出 #1

30 27 19 9 18 9 20 20 20 20
30 57 76 85 103 112 132 152 172 19

花了半天去理解题意…意思是说给你一个选手的滚球情况,打出他当前的成绩(坑了我不知道多少发 )
简单的说这题就是一个模拟(我才不是因为懒才找模拟题写的 )思路也很简单,对每一轮进行以下几个判断就行啦:

  1. 首先判断有没有在两次滚球之内把十个柱子滚完(判断有没有’/’);
  2. 如果滚完了(有’/’),在下一轮或下下轮找可以加的得分(如果三次滚球机会没用完,就不能输出得分);
  3. 如果没有滚完(没有’/’),判断当前轮有没有滚两次球(字符串长度是否为2),没有的话同样不能输出成绩.
    思路还是很清晰的,下面放上代码

ACCODE

#include <iostream>
#include <algorithm>
using namespace std;
int ans[15];//记录本轮得分的数组
int ans1[15];//前缀和数组
int flag[15];//标识能否输出答案
string s[15];int serch(int i)
{for(int j=0;j<s[i].size();j++){if(s[i][j]=='/')return j+1;}return 0;
}//判断是否存在'/'int getnum(int i,int len)
{int ans=0;int k=s[i].size();for(int j=0;j<min(k,len);j++)//防越界{if(s[i][j]=='/')ans=10;elseans+=(s[i][j]-'0');}return ans;
}
int main()
{int len=0;while(cin>>s[len++]);for(int i=0;i<10;i++){int k=3;if(s[i]=="")break;if(serch(i)){ans[i]+=10;k-=s[i].size();if(k>0){ans[i]+=getnum(i+1,k);k-=s[i+1].size();}//加上下次可以得到的分if(k>0){ans[i]+=getnum(i+2,k);k-=s[i+2].size();}加上下下次可以得到的分if(k<=0)flag[i]=1;//可以输出的分}else{ans[i]=getnum(i,s[i].size());if(s[i].size()==2)flag[i]=1;}}for(int i=0;i<10;i++){if(flag[i])cout<<ans[i]<<" ";} cout<<endl;ans1[0]=ans[0];for(int i=1;i<10;i++)ans1[i]=ans1[i-1]+ans[i];for(int i=0;i<10;i++){if(flag[i])cout<<ans1[i]<<" ";} //写的好丑...return 0;
}

洛谷P1166 打保龄球(模拟)相关推荐

  1. 洛谷 P1166 打保龄球

    P1166 打保龄球 题目描述 打保龄球是用一个滚球去打击十个站立的柱,将柱击倒.一局分十轮,每轮可滚球一次或多次,以击倒的柱数为依据计分.一局得分为十轮得分之和,而每轮的得分不仅与本轮滚球情况有关, ...

  2. 洛谷 10月 csp-s 模拟赛 T1,T2解析及代码

    洛谷 10月 csp-s 模拟赛 T1,T2解析及代码 T1 Magenta Potion 题目描述 给定一个长为 nnn 的整数序列 aaa,其中所有数的绝对值均大于等于 222.有 qqq 次操作 ...

  3. 洛谷P1088.火星人【模拟/搜索/康托展开】

    洛谷P1088.火星人[模拟/搜索/康托展开] 题干 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题意 思路一--模拟 分析 上代码 思路二--搜索 分析 上代码 思路三--变进制数与康托 ...

  4. 洛谷CSP-J/S2020初赛模拟部分题解

    说明 试题来源于洛谷CSP-J/S2020初赛模拟试题. 选择题 T1. 十进制数114的相反数的8位二进制补码是:(10001110) [解析]整数的二进制表示的最高位为符号位,用0表示" ...

  5. 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)

    洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...

  6. 洛谷 P1413 坚果保龄球

    P1413 坚果保龄球 题目描述 PVZ这款游戏中,有一种坚果保龄球.zombie从地图右侧不断出现,向左走,玩家需要从左侧滚动坚果来碾死他们. 我们可以认为地图是一个行数为6,列数为60的棋盘.zo ...

  7. 洛谷 P2689 东南西北【模拟/搜索】

    题目描述 给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地.求到达终点的最少时间. 如果无法偏移至终点,输出"-1". 输入输出格式 ...

  8. 洛谷 1563 玩具谜题——模拟水题

    题目:https://www.luogu.org/problemnew/show/P1563 模拟水题. #include<iostream> #include<cstdio> ...

  9. 洛谷:坚果保龄球(P1413,贪心)

    PVZ这款游戏中,有一种坚果保龄球.zombie从地图右侧不断出现,向左走,玩家需要从左侧滚动坚果来碾死他们. 我们可以认为地图是一个行数为6,列数为60的棋盘.zombie出现的那一秒站在这一行的第 ...

最新文章

  1. pch在c语言中占内存字节数,2018年9月计算机二级C语言考试章节习题及答案(6).docx...
  2. java params 参数_将params作为参数传递给类扩展方法的函数
  3. html表格中添加修改和删除链接,jQuery实现为table表格动态添加或删除tr功能示例...
  4. elementui表格-改变某一列的样式
  5. IE 7 Standard 模式问题总结
  6. 一个七年程序员的经验
  7. 条件随机场python实现_基于条件随机场的多标签分类
  8. android快速点击分析
  9. java能否回文_如何使用Java查找字符串是否是回文?
  10. C语言客户端窗口创建,【自己动手】用C语言写一个基于服务器和客户端!
  11. 你碰到过的最难调的 Bug 是什么?
  12. C++中#includeXXX.h和#includeXXX.h的区别
  13. Unity利用GPUinstancing实现大面积草地
  14. Ribbon界面开发(C++)
  15. Windows组策略
  16. CUDA的旋转R ROI Align的OPENCL实现1(原理理解)
  17. T100——错误信息提示传入参数显示
  18. (一)WLAN定义和基本架构
  19. openshift operator 介绍
  20. 怎么查看计算机簇大小,分区格式与簇的大小讲解

热门文章

  1. VT100控制码说明
  2. C语言做着做着会变成木马程序,为啥我用c语言写成的exe文件会被360当做木马?...
  3. 妙招更改iTunes备份地址释放C盘空间
  4. 五子棋(无游戏规则)
  5. 华为员工,30岁后还有出路吗?
  6. 差分约束入门题ZOJ2770AOJ517
  7. 【小菜学网络】MAC地址详解
  8. winen中文_Windows Server 2016 中英文版下载!
  9. 信用卡数字识别OpenCV实现(含代码)【DataWhale项目】
  10. 让你成为安全圈的Nmap高手