寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

C言語によるバドミントンの得点の記録

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