- 締切済み
数字でピラミッドを出力させるには・・・。
どうしても解決できないので、アドバイスなどいただけたらと思います。 For...NextのLoopを使って数字でピラミッド(二等辺三角形)を描く、 という問題です。 たとえばInputとして「7」を入れた場合: 1 121 12321 1234321 123454321 12345654321 1234567654321 と出力させたいのですが・・・試行錯誤しても、 まったく解決に至りません・・・。 もしわかる方がいらっしゃったら、ご回答お願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- BellBell
- ベストアンサー率54% (327/598)
すでに、回答そのものを出していただいているようですが、あえて考え方の考え方の説明をしてみます。 (1) 1 121 12321 1234321 123454321 12345654321 1234567654321 まずは中央の行を含めて、左側だけなら簡単かなと着目してみました。 ↓ 下記のようになりますね。 (2) 1 12 123 1234 12345 123456 1234567 左寄せしてみました。 ↓ (3) 1 12 123 1234 12345 123456 1234567 (3)を出力するプログラムを作れ、って言われたら『バカにするな!!』って怒りたいぐらい、簡単ですよね。 次に、(2)はというと、(3)が出力できるならこれも簡単。 (1)はというと、これも(2)が出力できるなら、簡単なんじゃないですか?
- pkh4989
- ベストアンサー率62% (162/260)
VBAです。参考にしてください。 Sub 数字でピラミッドを出力() Dim mI As Integer Dim wCnt As Integer ' mI = 7 '←Inputされた数字 With ActiveSheet .Cells.ClearContents For wI = 1 To mI wCnt = 0 For xI = 1 To wI * 2 - 1 If xI > wI Then wCnt = wCnt - 1 Else wCnt = wCnt + 1 End If .Cells(wI, mI + 1 - wI).Offset(0, xI) = wCnt Next Next End With End Sub 'マクロ貼付 (1) Alt+F11 (ツール → マクロ → Visual Basic Editor) →「挿入」→「標準モジュール」で表示される画面に貼り付け (2) 実行は、(F5を押す)又は、シート画面に戻って Alt+F8を押してマクロ一覧からマクロ名を選択して実行
- imogasi
- ベストアンサー率27% (4737/17069)
例を見れば特徴はわかるじゃないですか。 1段目 1個 2段目 3 3段目 5 ・・ と奇数になる。1個で始まり、両方に1つずつ、計2個増えるから当然。言い換えると奇数であるともいえる。 そしてその数の半分+1個目まで1ずつ増えて、そこから1づつ減少する。 VB6.0相当のエクセルVBAでやると(エクセル固有の部分は値を記録するCells()だけ。エクセル以外ならCells(()を配列と考えればよい。 ) Sub test01() For i = 1 To 8 n = (i - 1) * 2 + 1 m = 1 For j = 1 To Int(n / 2) Cells(i, m) = j m = m + 1 Next For j = Int(n / 2) + 1 To 1 Step -1 Cells(i, m) = j m = m + 1 Next Next i End Sub ーー ピラミッド状に見せるには エクセルのセルを利用した場合 Sub test02() x = 8 For i = 1 To x n = (i - 1) * 2 + 1 For k = 1 To x - i Cells(i, k) = "" Next k m = k For j = 1 To Int(n / 2) Cells(i, m) = j m = m + 1 Next For j = Int(n / 2) + 1 To 1 Step -1 Cells(i, m) = j m = m + 1 Next Next i End Sub エクセルのセルを利用しない場合は、左前半の空白部と2桁数字の場合は数字の桁合わせに注意(コードの変更)が必要。
- ShowMeHow
- ベストアンサー率28% (1424/5027)
どう考えて、何をしたんだけど、どこがうまくいかない。 を書いてもらわないとなんとも解答のしようがない。 全くどう取り組んでよいのかわからないなら ・各行を文字列として考える ・各行を配列として考える ・各列を配列として考える ・マトリックスとして考える どれを使ってもできる。 ということがヒントになるかな? 文字列が一番簡単な気がするけど、パフォーマンスを気にする場合は文字列を使うことはあまり賢い方法ではないこともある。
- higekuman
- ベストアンサー率19% (195/979)
たとえば12321が、1つのセルに1つの文字、つまり5つのセルに数字が1つずつ入っているのか、それとも、12321という数字が1つのセルに入っているのか、でプログラムが変わって来ますよね。 この質問だと、それがどっちなのかが解りません。 試行錯誤したようですが、どんなことを試してみたのかも書いたほうが良いでしょうね。