打保龄球(normal)

/*
【模拟试题】:打保龄球(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  ;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值