打保齡球問題__string

來源:互聯網
上載者:User
/*
【類比試題】:打保齡球(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 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.