トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

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を使い、
添字で場合分けしてます。