トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
ABC-039-C ピアニスト高橋君
■■■問題■■■
高橋君は青木君に突然魔法で小さくされ、ピアノの上に乗せられてしまいました。
高橋君は、今ピアノのある鍵盤の上に立っていますが、
どの鍵盤の上にいるのかを知りたいです。
高橋君は、自分の今いる鍵盤から右20個の鍵盤の色を調べました。
高橋君のいる鍵盤の音階を調べてください。
調べた鍵盤の色は、'W'、'B'からなる文字列Sとして与えられ、
'W'は白色、'B'は黒色を表します。
そして、高橋くんのいる鍵盤の色は文字列の先頭に対応します。
なお、ピアノの鍵盤は下図のように、
色は"白黒白黒白白黒白黒白黒白"、
音階は "ド ド# レ レ# ミ ファ ファ# ソ ソ# ラ ラ# シ" を繰り返しています。
■■■入力■■■
S
●与えられる鍵盤の色は正しい
●高橋君は白い鍵盤の上に立っている
●Sは20文字の 'W' 'B' からなる文字列である
■■■出力■■■
高橋君のいる鍵盤の音階が、
●"ド" ならば 'Do'
●"レ" ならば 'Re'
●"ミ" ならば 'Mi'
●"ファ" ならば 'Fa'
●"ソ" ならば 'So'
●"ラ" ならば 'La'
●"シ" ならば 'Si'
と出力する。
C#のソース
using System;
using System.Collections.Generic;
class Program
{
static string InputPattern = "Input1";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("WBWBWWBWBWBWWBWBWWBW");
//Do
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
string S = InputList[0];
// D R MF S L S
string PianoStr = "WBWBWWBWBWBW" + "WBWBWWBWBWBW" + "WBWBWWBWBWBW";
int wkInd = PianoStr.IndexOf(S);
if (wkInd == 0) Console.WriteLine("Do");
if (wkInd == 2) Console.WriteLine("Re");
if (wkInd == 4) Console.WriteLine("Mi");
if (wkInd == 5) Console.WriteLine("Fa");
if (wkInd == 7) Console.WriteLine("So");
if (wkInd == 9) Console.WriteLine("La");
if (wkInd == 11) Console.WriteLine("Si");
}
}
解説
String型のIndexOfを使い、
添字で場合分けしてます。