2008年9月19日金曜日

どう書く?.orgにVBAで投稿

すでにいくつか投稿しているのだけど、その中で気に入っているものを。

2^i * 3^j * 5^k の形で表される整数を小さい方から順に 100 個列挙するプログラムを書いてください。 i, j, k は 0 以上の整数です。アルゴリズムのオーダーについても考えてみてください。


2^i * 3^j * 5^k なる整数 どう書く?org


Sub Main()
Range("B1").Value = "2^i"
Range("C1").Value = "3^j"
Range("D1").Value = "5^k"
Range("B2:D2").Value = 0
Set r = Range("A1")
n = 1
c = 0
While c < 100
Set s = r.Offset(n)
s.Value = n
If Not IsEmpty(s.Offset(0, 1)) Then
c = c + 1
For i = 0 To 2
Set t = r.Offset(n * ((i * (i + 1) / 2) + 2))
For j = 0 To 2
t.Offset(0, j + 1).Value = _
s.Offset(0, j + 1).Value + IIf(i = j, 1, 0)
Next
Next
End If
n = n + 1
Wend
Cells.AutoFilter Field:=1, Criteria1:="<>"
Cells.AutoFilter Field:=2, Criteria1:="<>"
End Sub


コレクションを使わずに、シートに直接書いて最後にオートフィルタをかけるというあたりがExcelっぽい。

0 件のコメント:

コメントを投稿