保龄球娱乐计分

FJNU.1710

Description
保龄球一局分为十盘,每盘是滚一球或两球——如果某盘第一球未击倒十柱,则本盘未结,再滚第二球;如果某盘第一球击倒十柱,则本盘结束,转下一盘。
其计分原则是根据击倒的柱数累加计分,击倒一柱计一分。如果某盘第一球未击倒十柱,则直接把本球所击倒柱数计入分数,如果本盘第二球补击也未把剩余柱数击倒,也直接把本球所击倒柱数计入分数;如果本盘第二球补倒(即把剩余柱数全击倒),则把本球所击倒柱数和下一球的击倒柱数计入本球得分。如果某盘第一球击倒全部十柱(称全倒),则把本球所击倒柱数和下两球的击倒柱数计入本球得分。例如计分过程:
7 2(1st 盘end)6 4(2nd 盘end)8 2 (3rd 盘end) 10(4th盘end) 5 4(5th 盘end) 10(6th盘end) 10(7th盘end) 3 6(8th盘end) 8 1(9th盘end) 9 1(10th盘end) 5(奖一球)
累计分数过程7 9(1st 盘end)15 27(2nd 盘end) 35 47 (3rd 盘end) 66(4th盘end) 71 75(5th盘end) 98(6th盘end) 117(7th盘end) 120 126 (8th盘end) 134 135(9th盘end) 144 150(10th盘end) 155
即本局得155分。
7 2(1st 盘end)6 4(2nd 盘end)8 2 (3rd 盘end) 10(4th盘end) 5 4(5th盘end) 10(6th盘end) 10(7th盘end) 3 6(8th盘end) 8 1(9th盘end) 10(10th盘end) 4 5(奖两球)
累计分数过程7 9(1st 盘end)15 27(2nd 盘end) 35 47 (3rd 盘end) 66(4th盘end) 71 75(5th盘end) 98(6th盘end) 117(7th盘end) 120 126 (8th盘end) 134 135(9th盘end) 154(10th盘end) 158 163
即本局得163分。
7 2(1st 盘end)6 4(2nd 盘end)8 2 (3rd 盘end) 10(4th盘end) 5 4(5th盘end) 10(6th盘end) 10(7th盘end) 3 6(8th盘end) 8 1(9th盘end) 2 2(10th盘end)
累计分数过程7 9(1st 盘end)15 27(2nd 盘end) 35 47 (3rd 盘end) 66(4th盘end) 71 75(5th盘end) 98(6th盘end) 117(7th盘end) 120 126 (8th盘end) 134 135(9th盘end) 137 139(10th盘end)
即本局得139分。

Input
第一行为每局盘数10

Output
本局得分(并换行回车)

Sample Input
10
7  2  6  4  8  2   10  5  4  10  10  3  6  8  1  10  4  5

Sample Output
163

My Program

#include < iostream >
using   namespace  std;
int   * score;
int  T;

int  CountScore( int  next, int  tmp)
{
    
int x=0,k=0,i=1,t=0;
    
while(i<=T)
    
{
        
if(score[t]==10)
        
{
            x
+=score[t]+score[t+1]+score[t+2];
            i
++;
            k
=0;
            t
++;
            
continue;
        }

        
if(k%2)
        
{
            
if(t!=tmp-next+1)
                
if((score[t]+score[t-1])==10)
                    x
+=score[t]+score[t+1];
                
else
                    x
+=score[t];
            
else
                x
+=score[t];
            i
++;
            k
=0;
            t
++;
            
continue;
        }

        
else
        
{
            x
+=score[t];
            k
++;
            t
++;
        }

    }

    
if(next==2)
        x
+=score[t]+score[t+1];
    
else
        
if(next==1)
            x
+=score[t];
    
return x;
}


int  main()
{
    
int k=0,j,x,i=0,t=0,next=0;
    cin
>>T;
    score
=new int[T*2];
    
for(i=0;i<T*2;i++)
        score[i]
=0;
    i
=1;
    t
=0;
    
while(i<=T)
    
{
        cin
>>x;
        
if(x==10)
        
{
            score[t]
=10;
            
if(i==T)    
                next
=2;
            i
++;
            k
=0;
            t
++;
            
continue;
        }

        
if(k%2)
        
{
            score[t]
=x;
            
if(i==T)
                
if((score[t-1]+score[t])!=10)
                    next
=0;
                
else
                    next
=1;
            i
++;
            k
=0;
            t
++;
            
continue;
        }

        
else
        
{
            score[t]
=x;
            t
++;
            k
++;
        }

    }

    
for(j=0;j<next;j++)
    
{
        cin
>>x;
        score[t]
=x;
        t
++;
    }

    x
=CountScore(next,t);
    cout
<<x<<endl;
    
return 0;
}

YOYO's Note: 
主要应该是输入吧……
当时只是想着边读边判断是否有添加球数,是否继续读而已……
为什么好象我代码最长 = = ||

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值