ほぼ間違いなく宿題なので、ここに手がかりがあります。
行の前のスペースの数とその行の星の数を数えます。探しているのは、行番号とこれら 2 つの値の間の関係です。
次に、2 つの連続したループを使用できます。1 つfor
は星の数を増やし、もう 1 つは減らします。
これらの各ループ内には、さらに2 つの連続したループがあり、必要な数のスペース、必要な数の星、改行文字が出力されます。
上記を読んでもまだ問題がある場合は、これを検討してください。(奇数、コメントで強制すると述べているように) の入力の場合n
、スペース数は から始まり(n - 1) / 2
、スター数はから始まり1
ます。後続の行ごとに、スペース数が減少し1
、星の数が増加し2
ます。
これは、スペース数が に達するまで機能し0
、その後、向きを変えて反対方向に進み、その中央の行を 2 回印刷しないようにします。
星の数が に達したら、完了0
です。
あとは、その仕様をコードに変換するだけです :-)
さて、あなたはコメントで、単にコードを渡すのではなく、独自のソリューションを作成することに興味があることを示したので、独自のソリューションをチェックできるものを提供することに抵抗はありません。使用する疑似コードは次のとおりです。
# Input data, check and init counters.
input n
make sure n is odd and greater than 2
set numspaces to (n-1) / 2
set numstars to 1
# Gradually get wider until just before middle line.
while numspaces > 0:
for i = 1 to numspaces: output " "
for i = 1 to numstars: output "*"
output newline
subtract 1 from numspaces
add 2 to numstars
# Gradually get thinner until end.
while numstars > 0:
for i = 1 to numspaces: output " "
for i = 1 to numstars: output "*"
output newline
add 1 to numspaces
subtract 2 from numstars
そして、最後の演習として、次のようにリファクタリングできます。
for i = 1 to numspaces: output " "
for i = 1 to numstars: output "*"
output newline
2 つのループ間で共通であるため、別の関数に変換します。
これで、独自のコードが機能するようになったので、完全を期すために、概念実証のために使用した Python コードを次に示します。
def lineout (sp, st):
s = ""
for i in range (sp): s = "%s "%(s)
for i in range (st): s = "%s*"%(s)
print s
n = 21
numspaces = (n-1) / 2
numstars = 1
while numspaces > 0:
lineout (numspaces, numstars)
numspaces -= 1
numstars += 2
while numstars > 0:
lineout (numspaces, numstars)
numspaces += 1
numstars -= 2
より最新の機能を使用すれば、おそらく Python でより簡潔に記述できますが、それでは、迅速な理解と簡単な翻訳という目的が損なわれます。必要な数に変更n
するだけです(奇数で2より大きい、結果のダイヤモンドが端末に収まる場合)。出力をお楽しみください:-)
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
*******************
*****************
***************
*************
***********
*********
*******
*****
***
*