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 - Other

再帰版ver.2

二桁の場合にも右端が揃うように汎用性を持たせてみました。

例:(kuku 19)
(省略)
19 *  1 =  19
19 *  2 =  38
19 *  3 =  57
19 *  4 =  76
19 *  5 =  95
19 *  6 = 114
19 *  7 = 133
19 *  8 = 152
19 *  9 = 171
19 * 10 = 190
19 * 11 = 209
19 * 12 = 228
19 * 13 = 247
19 * 14 = 266
19 * 15 = 285
19 * 16 = 304
19 * 17 = 323
19 * 18 = 342
19 * 19 = 361
 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
(defun kuku (n)
;nの桁数をlen1,最も大きな積(n*n)の桁数をlen2とする
    (let ((len1 (digits n))
          (len2 (digits (* n n))))
       (sub n len1 len2)))

(defun sub (n len1 len2 &optional (x 1) (y 1))
  (cond ((and (= x n) (> y n)) nil)
        ((> y n) (sub n len1 len2 (+ x 1) 1))
        (t (print-space (- len1 (digits x)))
           (format t "~D * " x)
           (print-space (- len1 (digits y)))
           (format t "~D = " y)
           (print-space (- len2 (digits (* x y))))
           (format t "~D~%" (* x y))
           (sub n len1 len2 x (+ y 1)))))

;桁数を数える
(defun digits (m &optional (d 0))
  (cond ((zerop m) d)
        (t (digits (floor m 10) (incf d)))))

;空白を出力
(defun print-space (space-num)
  (dotimes (i space-num)
    (format t " ")))

Factor です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
USING: kernel sequences math math.parser io ;

: out ( x y -- )
  over number>string write
  " * " write
  dup number>string write
  " = " write
  * number>string 2 CHAR: \s pad-left write nl ;

9 [ 1+ 9 [ dupd 1+ out ] each drop ] each

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
: PRINT ( i j -- , print formated i * j = i*j )
2DUP SWAP . ." *" SPACE . ." =" SPACE * 2 .R CR ;

: KUKU ( -- , print all kuku )
10 1 DO
  10 1 DO J I
    PRINT
  LOOP
LOOP ;

KUKU

Index

Feed

Other

Link

Pathtraq

loading...