保齡球計分問題

2021-09-12 00:16:07 字數 1904 閱讀 2761

題目描述

在保齡球比賽中,已知每次擊倒的保齡球數,計算在一局比賽中乙個人的得分,要算出每一輪的得分和每一輪之後的累加得分。

保齡球比賽一局共10輪,前9輪中每一輪最多滾兩次球;第十輪可以滾兩次或3次球。每輪計分規則為

(1)如果一輪中第乙個球擊倒全部10個保齡球,稱為strike(好球),則這一輪的得分等於10加上下兩輪擊倒保齡球的個數。

(2)如果一輪中兩個球擊倒全部10個保齡球,稱為spare(成功),則這一輪的得分等於本輪所擊倒保齡球的總個數。

(3)如果一輪中兩個球一共擊倒保齡球的個數少於10,稱為normal(平常),則這一輪的得分等於本輪所擊倒保齡球的個數。

程式要求輸入20個不大於10的整數,表示一局中每一輪擊倒的球數,最後輸出這一局各輪的得分以及該局的總分。

演算法分析:

本題可以對輪次進行迴圈,依次求出一局中各輪的分數。在每一輪中如果第一次滾出10分,則其得分與下兩次滾球的分數相關如果第一次未滾出10分,則兩次滾得分數之和如果不為10,則本輪得分即為兩次滾得的分數之和;否則,本輪得分與下一輪的得分有關。因為一輪的得分與其是strike、spare還是normal的狀態有關,因此需用變數儲存。又因為一輪的得分最多隻與其後兩輪的得分有關,因此只需用兩個變數來儲存當前輪的前兩輪的狀態即可。

因此各輪得分的計算方法是,先求出第1、2輪的暫時得分和狀態,再從第3輪開始,依次計算本輪前兩輪的得分及本輪的暫時得分和狀態,當然如果本輪的狀態為nomal,則其得分馬上可以得到,前兩輪的得分也可以確定。

對第10輪,因為可以滾3次球,因此其得分為如果第一次得10分,或前兩次共得10分,則最後得分為三次得分之和,否則最後得分為兩次得分之和。

#include

#include

intmain()

;//陣列儲存各輪得分

int state1=

0,state2=0;

//上兩輪的狀態

int i,score,state;

//i為迴圈變數,score儲存當前得分,state為本輪狀態

int totalscore=0;

//總得分

for(i=

0;i<

10;i++

) game[i]

=score;

//儲存進陣列

程式設計大賽 保齡球計分系統

一局有十格,每格有兩次投球機會,如在第一次投球時沒能全中,就有需要投第二球。每格可能出現的情況 1 失球 在兩次投後,未能擊倒10個瓶,此格的分數為擊倒的個數。如果一次擊球未擊到乙個,則用乙個 標記 2 補中 第二次補投後,擊倒10個瓶,此格的分數為10加上下一次投的瓶數。3 全中 一次性擊倒10個...

再見,保齡球

出差到了哈爾濱,天氣逐漸變冷,緊張工作之餘,領導帶我們去放鬆一下,打保齡球。來到火車站附近的崑崙大酒店,4層開了乙個保齡球俱樂部。等了近乙個時辰,開了兩個道,開始扔球。一行六人,領導以前有練過,以前能打200分以上 這是我第3次打保齡球 另乙個同事m則是第2次打 其他同事則是第1次。我和同事l z一...

C語言保齡球

保齡球計分規則簡單總結如下 每次遊戲有10輪 每一輪,投手有兩次投擲機會擊倒所有瓶子 如果在兩次投擲中,投手沒有擊倒所有瓶子,他在本輪分數計為兩次擊倒的瓶子數之和 如果在某一輪的首次就擊倒所有瓶子,這稱為乙個 strike 一投全倒 則本輪結束,本輪分數計為10 後續兩次擊倒的瓶子總數 如果在某一輪...