打保龄球问题
来源:互联网 发布:怎么取消淘宝短信通知 编辑:程序博客网 时间:2024/05/01 22:22
/*
【模拟试题】:打保龄球(normal)
Time Limit:1000MS Memory Limit:65536K
Total Submit:58 Accepted:9
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
输入数据用文件bowling.in,文件内容仅有一行,为前若干轮滚球的情况,每轮滚球用一到两个字符表示,每一个字符表示一次击球,字符“/”表示击倒当前球道上的全部的柱,否则用一个数字字符表示本次滚球击倒的当前球道上的柱的数目,两轮滚球之间用一个空格字符隔开。
如上例对应的输入文件内容为:/ / / 72 9/ 81 8/ / 9/ / 8/
Output
输出到文件bowling.out,共两行,第一行为每轮得分,第二行为到当前轮为止的总得分。每个得分之间用一个空格隔开。
Sample Input
/ / / 72 9/ 81 8/ / 9/ / 8/
Sample Output
30 27 19 9 18 9 20 20 20 20
30 57 76 85 103 112 132 152 172 192
*/
#include <stdio.h>
#include <string.h>
#define MAX 21
int main(void)
{
char c,st[MAX];
int a[MAX]={0},b[MAX]={0};
int i,j,total=0,t=0,now=0,temp;
while( (c=getchar())!= ' ')
{
if(c != ' ')
st[++t]= c;
}
for(i=1,j=1; i<=10; i++)
{
if(st[j] == '/')
{
now = 10 ;
if(st[j+1] == '/')
{
now += 10 ;
if(st[j+2] == '/')
now += 10 ;
else
now += st[j+2]-'0' ;
}
else /*考虑后面的性况是否是连续的*/
{
if(st[j+2] == '/')
now += 10 ;
else
now += st[j+1]-'0'+ st[j+2]-'0' ; }
j += 1 ;
}
else
{
if(st[j+1] =='/')
{
if(st[j+2] == '/')
now = 20 ;
else
now = 10 + st[j+2]-'0' ;
}
else
now = st[j]-'0'+ st[j+1]-'0' ;
j += 2 ;
}
total += now ;
a[i] = now ;
b[i] = total;
}
for(i=1 ; i<= 10 ; i++)
printf("%d ",a[i]);
printf(" ");
for(i=1 ; i<= 10 ; i++)
printf("%d ",b[i]);
printf(" ");
return 0 ;
}
【模拟试题】:打保龄球(normal)
Time Limit:1000MS Memory Limit:65536K
Total Submit:58 Accepted:9
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
输入数据用文件bowling.in,文件内容仅有一行,为前若干轮滚球的情况,每轮滚球用一到两个字符表示,每一个字符表示一次击球,字符“/”表示击倒当前球道上的全部的柱,否则用一个数字字符表示本次滚球击倒的当前球道上的柱的数目,两轮滚球之间用一个空格字符隔开。
如上例对应的输入文件内容为:/ / / 72 9/ 81 8/ / 9/ / 8/
Output
输出到文件bowling.out,共两行,第一行为每轮得分,第二行为到当前轮为止的总得分。每个得分之间用一个空格隔开。
Sample Input
/ / / 72 9/ 81 8/ / 9/ / 8/
Sample Output
30 27 19 9 18 9 20 20 20 20
30 57 76 85 103 112 132 152 172 192
*/
#include <stdio.h>
#include <string.h>
#define MAX 21
int main(void)
{
char c,st[MAX];
int a[MAX]={0},b[MAX]={0};
int i,j,total=0,t=0,now=0,temp;
while( (c=getchar())!= ' ')
{
if(c != ' ')
st[++t]= c;
}
for(i=1,j=1; i<=10; i++)
{
if(st[j] == '/')
{
now = 10 ;
if(st[j+1] == '/')
{
now += 10 ;
if(st[j+2] == '/')
now += 10 ;
else
now += st[j+2]-'0' ;
}
else /*考虑后面的性况是否是连续的*/
{
if(st[j+2] == '/')
now += 10 ;
else
now += st[j+1]-'0'+ st[j+2]-'0' ; }
j += 1 ;
}
else
{
if(st[j+1] =='/')
{
if(st[j+2] == '/')
now = 20 ;
else
now = 10 + st[j+2]-'0' ;
}
else
now = st[j]-'0'+ st[j+1]-'0' ;
j += 2 ;
}
total += now ;
a[i] = now ;
b[i] = total;
}
for(i=1 ; i<= 10 ; i++)
printf("%d ",a[i]);
printf(" ");
for(i=1 ; i<= 10 ; i++)
printf("%d ",b[i]);
printf(" ");
return 0 ;
}
#include <stdio.h>
#include <string.h>
#define MAX 21
int count(char ch)
{
if( ch == '/')
return 10 ;
else
return (ch-'0');
}
int main(void)
{
char c,st[MAX];
int a[MAX]={0},b[MAX]={0};
int i,j,total=0,t=0,now=0,temp;
while( (c=getchar())!= ' ')
{
if(c != ' ')
st[++t]= c;
}
for(i=1,j=1; i<=10; i++)
{
if(st[j] == '/')
{
now = 10 ;
if(st[j+1] == '/')
now += 10+count(st[j+2]) ;
else /*考虑后面的性况是否是连续的*/
{
if(st[j+2] == '/')
now += 10 ;
else
now += count(st[j+1])+count(st[j+2]) ;
}
j += 1 ;
}
else
{
if(st[j+1] =='/')
now = 10 + count(st[j+2]);
else
now = count(st[j]) + count(st[j+1]);
j += 2 ;
}
total += now ;
a[i] = now ;
b[i] = total;
}
for(i=1 ; i<= 10 ; i++)
printf("%d ",a[i]);
printf(" ");
for(i=1 ; i<= 10 ; i++)
printf("%d ",b[i]);
printf(" ");
printf("/=%d",'/');
system("pause");
return 0 ;
}
- 打保龄球问题
- 打保龄球(normal)
- 保龄球
- 2010年12月24日打保龄球
- 再见,保龄球
- 保龄球得分
- 保龄球效应
- 深圳保龄球大全
- 保龄球娱乐计分
- 保龄球的启示
- 保龄球的启示
- 【保龄球】解题报告
- TDD练习:保龄球计分
- 保龄球-----计分程序
- 保龄球规则计分
- bzoj 3877: [Ahoi2014]保龄球
- java-保龄球比赛
- 保龄球计分算法
- 双色球稳赢投注方法
- 再小的帆也能远航
- ASP.NET2.0 WebPart实例教程
- “离职风险”与“跳低效应”
- MFC中常用宏定义
- 打保龄球问题
- Programming Video for Windows
- ASP.NET程序中常用代码汇总(一)
- Tuscany--SDO(Service Data Objects)服务数据对象
- 视频采集编程
- EJBCA User Guide
- 买房……
- Linux设备驱动程序设计实例
- Spring+Hibernate+Struts技术的一个分页程序