dポイントプレゼントキャンペーン実施中!

どうしても解決できないので、アドバイスなどいただけたらと思います。

For...NextのLoopを使って数字でピラミッド(二等辺三角形)を描く、
という問題です。

たとえばInputとして「7」を入れた場合:

      1
     121
    12321
   1234321
  123454321
 12345654321
1234567654321

と出力させたいのですが・・・試行錯誤しても、
まったく解決に至りません・・・。
もしわかる方がいらっしゃったら、ご回答お願いいたします。

A 回答 (5件)

すでに、回答そのものを出していただいているようですが、あえて考え方の考え方の説明をしてみます。


(1)
      1
     121
    12321
   1234321
  123454321
 12345654321
1234567654321

まずは中央の行を含めて、左側だけなら簡単かなと着目してみました。
      ↓
下記のようになりますね。
(2)
      1
     12
    123
   1234
  12345
 123456
1234567

左寄せしてみました。
   ↓
(3)

12
123
1234
12345
123456
1234567

(3)を出力するプログラムを作れ、って言われたら『バカにするな!!』って怒りたいぐらい、簡単ですよね。
次に、(2)はというと、(3)が出力できるならこれも簡単。
(1)はというと、これも(2)が出力できるなら、簡単なんじゃないですか?
    • good
    • 0

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を押してマクロ一覧からマクロ名を選択して実行
    • good
    • 1

例を見れば特徴はわかるじゃないですか。


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桁数字の場合は数字の桁合わせに注意(コードの変更)が必要。
    • good
    • 0

どう考えて、何をしたんだけど、どこがうまくいかない。


を書いてもらわないとなんとも解答のしようがない。

全くどう取り組んでよいのかわからないなら
・各行を文字列として考える
・各行を配列として考える
・各列を配列として考える
・マトリックスとして考える
どれを使ってもできる。 ということがヒントになるかな?
文字列が一番簡単な気がするけど、パフォーマンスを気にする場合は文字列を使うことはあまり賢い方法ではないこともある。
    • good
    • 0

たとえば12321が、1つのセルに1つの文字、つまり5つのセルに数字が1つずつ入っているのか、それとも、12321という数字が1つのセルに入っているのか、でプログラムが変わって来ますよね。


この質問だと、それがどっちなのかが解りません。

試行錯誤したようですが、どんなことを試してみたのかも書いたほうが良いでしょうね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!