challenge 九九の表示

掛け算の九九を下のように表示してください。

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
動的にサイズを変えられるようにしてみました。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
        static void Main(string[] args)
        {
            kuku(9);
            kuku(99);
            kuku(999);
        }

        static void kuku(int n)
        {
            int len = n.ToString().Length;
            int xLen = (n * n).ToString().Length;
            string    format = "{0, " + len + "} * {1, " + len + "} = {2, " + xLen + "}";

            for (int i = 1; i <= n ; ++i)
                for (int j = 1; j <= n ; ++j)
                    Console.WriteLine(format, i, j, i * j);
        }
面白くない答えですが・・・

sayは、printlnだと思ってください。
t_ishida
1
for(var i=1;i<10;i++) for(var j = 1;j<10;j++) say([i,'*',j,'=',''].join(' ') + (i * j > 9 ? '' : ' ') + i * j);

Posted feedbacks - StandardML

SML/NJのFormatストラクチャ使用。
とりあえず2桁以上も無問題。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
fun showMTable n =
let
  fun show col row =
  let
    open Format

    fun loop n m =
    let
      val h = n div 10
    in
      if h = 0 then m else loop h (m + 1)
    end

    val x = loop n 1
    val y = loop (n * n) 1
    val s = format ("%%%dd * %%%dd = %%%dd\n") [INT x, INT x, INT y]
  in
    if col <= n then
      if row <= n then
        (formatf s print [INT col, INT row, INT (col * row)];
         show col (row + 1))
      else
        show (col + 1) 1
    else
      ()
  end
in
  show 1 1
end;

showMTable 9 (* showMTable n で n * n まで表示 *)

多分こう書くのが普通じゃないかと思った。というコトで、大した変更はないですがリファクタリング。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
fun showMTable n =
let
  fun show col row =
  let
    open Format

    fun loop n m =
    let
      val h = n div 10
    in
      if h = 0 then m else loop h (m + 1)
    end

    val x = loop n 1
    val y = loop (n * n) 1
  in
    if col <= n then
      if row <= n then
        (formatf "%d * %d = %d\n" print [RIGHT (x, INT col), RIGHT (x, INT row),
        RIGHT (y, INT (col * row))];
         show col (row + 1))
      else
        show (col + 1) 1
    else
      ()
  end
in
  show 1 1
end;

showMTable 9 (* showMTable n で n * n まで表示 *)

Index

Feed

Other

Link

Pathtraq

loading...