2014年08月03日

C#で九九の表示(桁合わせ)

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その30

■問題
掛け算の九九を下のように表示してください。
1 * 1 =  1
1 * 2 =  2
1 * 3 =  3
(略)
7 * 8 = 56
7 * 9 = 63
8 * 1 =  8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
(略)
9 * 8 = 72
9 * 9 = 81
なお、この問題は掛け算をどうやるかではなく、どうやって右端がそろうようにレ イアウトするかに重点を置いているので、下のようなへこんだ出力は禁止です。
7 * 9 = 63
8 * 1 = 8
8 * 2 = 16

※ ごめんなさい出題者の方が分かりません。

右端そろえは、string.Format 使えば簡単に出来ますね。
using System;
using System.Linq;

namespace Doukaku.Org {
    class Program {
        static void Main(string[] args) {
            PrintTimesTable();
            Console.ReadLine();
        }

        private static void PrintTimesTable() {
            for (int i = 1; i <= 9; i++)
                for (int j = 1; j <= 9; j++) {
                    string s = string.Format("{0} * {1} = {2,2}", i, j, i * j);
                    Console.WriteLine(s);
                }
        }
    }
}

でも、これだけだと面白くないので、LINQ to Object 使って書いてみました。
まずは、クエリ構文使ったコード。

  private static void PrintTimesTable() {
      var q = from i in Enumerable.Range(1, 9)
              from j in Enumerable.Range(1, 9)
              select string.Format("{0} * {1} = {2,2}", i, j, i * j);
      q.ToList().ForEach(Console.WriteLine);
  }

次は、メソッド構文を使ったコード。 やってるいることは同じです。

  private static void PrintTimesTable() {
      Enumerable.Range(1, 9)
          .SelectMany(i => Enumerable
.Range(1, 9) .Select(j => string.Format("{0} * {1} = {2,2}", i, j, i * j))) .ToList() .ForEach(Console.WriteLine); }


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52378820