C言語によるバドミントンの得点の記録です。
サーブ順の記録から、データセット毎に得点を記録するプログラムです。
・問題
A君、Bさん、C君で久しぶりに遊ぶことになりました。
A君とBさんがプレイヤー、C君が審判になりバドミントンのシングルスのゲームをしました。
3人で決めたルールは以下の通りです。
3 ゲームを行います。
11 点を先取した人が、そのゲームの勝者となります。
第 1 ゲームの最初のサーブはA君から始まりますが、次のサーブは直前のポイントを取った人が行います。
第 2 ゲーム、第 3 ゲームは前のゲームを取った人が最初のサーブを行います。
10 - 10 になって以降は 2 点差をつけた人が勝者となります。
全てのゲームが終わり、得点を見ようとしたのですが、審判のC君が得点を記録するのを忘れていました。
しかし、サーブを打った人をきちんと記録していました。
サーブ順の記録から得点を計算するプログラムを作成してください。
ただし、二人が打ったサーブの回数の合計は 100 以下とし、サーブ順の記録は、サーブを打った人を表す "A" または "B" の文字列で表されます。
・入力される値
複数のデータセットの並びが入力として与えられます。
入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。
record1
record2
record3
i 行目に第 i ゲームのサーブ順を表す文字列が与えられます。
データセットの数は 20 を超えません。
・期待する出力
データセット毎に、i 行目に第 i ゲームのA君の得点とBさんの得点を空白区切りで出力してください。
僕が作成、提出したコードは、以下のとおりです。
/* Problem Set from Volume1 0174 : Badminton http://judge.u-aizu.ac.jp/ C言語によるバドミントンの得点の記録 https://neguse-atama.hatenablog.com */ #include<stdio.h> #include<string.h> int main(void){ while(1){ char record[200]; int a=0; int b=0; int i=1; scanf("%s",record); if(strcmp(record,"0") == 0){ break; } while(record[i]!='\0'){ if(record[i]=='A'){ a++; }else if(record[i]=='B'){ b++; } i++; } if(a<b){ b++; }else{ a++; } printf("%d %d\n",a,b); } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
Problem Set from Volume1 0174 : Badminton