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

No.82 市松模様

■■■問題■■■

幅Wと高さHと左上の色が指定されるので市松模様を描け。
市松模様は、黒と白が交互に現れる模様である。
模様は黒を'B'、白を'W'を使って描くものとする。

■■■入力■■■

W H C

幅Wと高さHと左上の色Cの3つの情報が与えられる。
W,Hは1以上50以下の整数。(1 <= W,H <= 50)
Cは'B'か'W'のどちらかである。

■■■出力■■■

市松模様を描け。最後の行にも改行を忘れずに。


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "Input4";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("4 3 B");
            //BWBW
            //WBWB
            //BWBW
            //左上が黒'B'で幅が4、高さが3の市松模様が描けた
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("3 4 W");
            //WBW
            //BWB
            //WBW
            //BWB
            //左上が白'W'で幅が3、高さが4の市松模様が描けた
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("1 1 W");
            //W
            //見た目として市松模様では無いが答えとしては正しいとする
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        string[] wkArr = InputList[0].Split(' ');
        int W = int.Parse(wkArr[0]);
        int H = int.Parse(wkArr[1]);
        char C = char.Parse(wkArr[2]);

        for (int Y = 0; Y <= H - 1; Y++) {
            for (int X = 0; X <= W - 1; X++) {
                bool IsEven = ((X + Y) % 2 == 0);
                if (C == 'B') Console.Write(IsEven ? 'B' : 'W');
                else Console.Write(IsEven ? 'W' : 'B');
            }
            Console.WriteLine();
        }
    }
}


解説

(0,0)からのマンハッタン距離で、
白色か黒色かを分岐させてます。