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

表頭,表側に余計なものがつきますが
1
data.frame(x=rep(1:9, each=9), y=rep("*", 81), z=rep(1:9, 9), u=rep("=", 81), v=as.vector(outer(1:9, 1:9, "*")))

これなら,余分なものは付かない
1
cat(sprintf("%i * %i = %2i", rep(1:9, each=9), rep(1:9, 9), outer(1:9, 1:9, "*")), fill=10)

for文を使わないところにRらしさがあって素敵です。
掛け算の外積(outer)は "1:9 %o% 1:9" と演算子を使って書けたりしますよ(ご存知でしたらすみません)。
1:9が冗長に見えるかな・・・と思ったのでこんな別解を考えてみました。
1
with(expand.grid(1:9, 1:9), {cat(sprintf("%i * %i = %2i", Var2, Var1, Var1*Var2), fill=10)})

各行の要素を行番号で埋めるという関数col()を使ってみました。
1
2
3
a<-1:9
b<-a %o% a
writeLines(paste(col(b),"*",a,"=",format(b,0,2)))

すみません。間違えました。
「各行の要素を行番号で埋めるという関数col()」ではなくて
「各列の要素を列番号で埋めるという関数col()」でした。
> a<-matrix(1,3,4)
> a
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    1    1    1    1
[3,]    1    1    1    1
> col(a)
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    1    2    3    4
[3,]    1    2    3    4

Index

Feed

Other

Link

Pathtraq

loading...