タイトル説明
ポスト10の立って、列のダウンをヒットするボールとボウリング。10局は、丸いボールを1回以上、ベーススコアリングダウン列の数であってもよいです。イニングは10スコア合計スコア、及び各ラウンドのスコアだけでなく、丸いボールの状況で、ボールはまた、その後のラウンドの場合に関連してもよいです。これは、ボールのラウンド数の特定の列だけでなく、現在のラウンドのスコアを含めノック、また12の前にスコアに向かってカウントすることができます。次のように特定の列には、ボールとスコアリングルールを打ちます:
(1)最初のラウンドは、ボール上のすべての10の列をノックダウンした場合、いない丸いボール(あなたが二回、追加の10ラウンドボールを必要とする場合、それは第十一と呼ばれることもあります第十二ラウンドとラウンドは、すべてではない例は、第11及び第12ラウンド丸いボール)をロールバックする必要があります。スコアリングホイール10はノックアウトでボールを転がし、次の列数と列数と2をノックダウン指向します。
(2)ボールが最初のラウンドのノックダウンの10列でない場合は、再びボールの残りの柱の上に注ぐことができません。これら2個のボールが10個すべての列は、もはや丸いボール(あなたがボールの追加の第十ラウンドを必要とする場合)でノックダウンしない場合は、このラウンドのスコアは、将来で二回数101010列をノックダウンし、第1ボールと列の数をダウン。
丸いボールは二回、すべての10の列がダウンしていない場合(3)は、ボールが現在のラウンド、列と多数のダウンこれら2つのボールのラウンドスコアを続行しません。
場合要するに、 - 丸いボール回または10列ダウン二回ゴロ、最初のラウンドボールラウンドスコアがない一度か二度持っている三つの連続鉢のとカラムダウンスタートの合計は(あります丸いボール)。列数ダウン第2ボールが10未満である内の場合、ラウンドのスコアは、これら二つのダウンと列の数の合計です。次のように実施例の以下の方法(「/」の記号は、フェアウェイダウン現在の列の全てを表します):
ホイール123,456,789,101,112
どこショット/ / / 818分の729 / / 9 / / 8 /
各車輪30 2,719,918,920,202,020スコア
57は蓄積される30 7,685,103,112,132,152,172 192となります
今、あなたはボーリングリアルタイムのスコアリング手順はラウンドの終了後にスコアを計算して表示するために使用される書き込み。ホイールは、スコアを計算することが一時的にできない場合、スコアはホイールを表示しません。
入力形式
唯一の行、ボールの数回前の場合、1つのまたは2つの文字を有する丸いボールが各文字がストロークを表す表し、文字「/」手段はフェアウェイの現在の列の全て、別段の使用をノックダウンフェアウェイ、2個のボールダウンこのボールの現在の列番号の間に空白文字で区切られた数字を示しています。
入力に対応するコンテンツファイルの例として:/ / / 818分の729 / / 9 / / 8 /
出力フォーマット
2つのラインの合計、最初のラウンド行動スコア、総合スコアまで、第2のホイールの現在の動作。スペースで区切っ間の各スコア。
サンプル入力と出力
入力#1
/ / / 72 81分の9 8 / / 9 / / 8 /
出力#1
30 27 19 9 18 9 20 20 20 20
30 57 76 85 103 112 132 152 172 19
それはあなたのプレーヤーのゴロ場合は、彼が果たしたこと...質問の意味を理解するための手段を長い時間がかかった現在の結果を(ピットが、私はどのくらいの髪を知らない)
簡単に言えば、これはシミュレーションの問題です(私はそれを見つけるために怠惰だったので、私はしませんでしたアナログ内接)アイデアは、各ラウンドのために、非常に単純であるラインで次の判断でした。
- まず、2個のボール転がり終了の10列以内が決定される(分析が「/」);
- あなたがロールオーバーした場合は(そこに「/」)、次のラウンドまたは(あなたがいない出力得点することができ、機会がボールを実行しなかった場合は3回)あなたは、スコアを追加することができます見つけようとして次のラウンドで。
- 完成していないロール(ない「/」)、二回転がり現在の丸いボールが決定されない場合は、同じ結果を出力することができない場合には、(文字列の長さは2である)。
アイデアは非常に明確で、次のコードが置かれています
ACCODE
#include <iostream>
#include <algorithm>
using namespace std;
int ans[15];//记录本轮得分的数组
int ans1[15];//前缀和数组
int flag[15];//标识能否输出答案
string s[15];
int serch(int i)
{
for(int j=0;j<s[i].size();j++)
{
if(s[i][j]=='/')
return j+1;
}
return 0;
}//判断是否存在'/'
int getnum(int i,int len)
{
int ans=0;
int k=s[i].size();
for(int j=0;j<min(k,len);j++)//防越界
{
if(s[i][j]=='/')
ans=10;
else
ans+=(s[i][j]-'0');
}
return ans;
}
int main()
{
int len=0;
while(cin>>s[len++]);
for(int i=0;i<10;i++)
{
int k=3;
if(s[i]=="")
break;
if(serch(i))
{
ans[i]+=10;
k-=s[i].size();
if(k>0)
{
ans[i]+=getnum(i+1,k);
k-=s[i+1].size();
}//加上下次可以得到的分
if(k>0)
{
ans[i]+=getnum(i+2,k);
k-=s[i+2].size();
}////加上下下次可以得到的分
if(k<=0)
flag[i]=1;//可以输出的分
}
else
{
ans[i]=getnum(i,s[i].size());
if(s[i].size()==2)
flag[i]=1;
}
}
for(int i=0;i<10;i++)
{
if(flag[i])
cout<<ans[i]<<" ";
}
cout<<endl;
ans1[0]=ans[0];
for(int i=1;i<10;i++)
ans1[i]=ans1[i-1]+ans[i];
for(int i=0;i<10;i++)
{
if(flag[i])
cout<<ans1[i]<<" ";
} //写的好丑...
return 0;
}