C++で菱形(ダイヤモンド)パターンを出力するプログラムの作り方
本記事では、コンソールに菱形(ダイヤモンド型)の星形パターンを出力するC++プログラムを紹介します。行数を入力すると、その大きさに応じた菱形が表示される、定番のアルゴリズム演習問題です。二重ループの考え方を学ぶのに最適な題材なので、ぜひ参考にしてください。
アルゴリズム
菱形の出力は「上半分」と「下半分」の2段階に分けて考えるのがポイントです。まず上向きの三角形を作り、次に同じ処理を逆順に実行することで、対称的な菱形が完成します。
Begin
行数 n を入力として受け取る(nは菱形の寸法を表す)。
変数 i、j を宣言し、space = 1 で初期化する。
space = n - 1 と設定する。
i が n に達するまでforループを繰り返す。
空白を出力するためのforループを実行する。
space を1つ減らす。
星印(*)を出力するためのforループを実行する。
同じ処理を今度は逆順に行う。
space = 1 で初期化する。
i が n に達するまでforループを繰り返す。
空白を出力するためのforループを実行する。
space を1つ増やす。
星印(*)を出力するためのforループを実行する。
Endサンプルコード
#include<iostream>
using namespace std;
int main() {
int n, i, j, space=1;
cout<<"Enter number of rows : ";
cin>>n;
space=n-1;
for (i=1; i<=n; i++) {
for(j=1; j<=space; j++) {
cout<<" "; //空白を出力
}
space--;
for(j=1; j<=(2*i-1); j++) {
cout<<"*"; //星印を出力
}
cout<<"\n";
}
//ここから逆順の出力
space=1;
for (i=1; i<=n; i++) {
for(j=1; j<=space; j++) {
cout<<" "; //空白を出力
}
space++;
for(j=1; j<=(2*(n-i)-1); j++) {
cout<<"*"; //星印を出力
}
cout<<"\n";
}
return 0;
}※元のコードでは戻り値の型を省略した main() が使われていますが、現代のC++規格では int main() と記述するのが正しい書き方のため、上記のサンプルでは修正しています。
プログラムの仕組み
上半分のループでは、各行ごとに空白の数を1つずつ減らしながら、星印を奇数個(1個、3個、5個…)ずつ増やしていきます。星印の個数は 2 * i - 1 という式で計算されており、これにより中央に向かって幅が広がる三角形が描かれます。
下半分のループではその逆を行い、空白を増やしながら星印を 2 * (n - i) - 1 個ずつ減らしていくことで、下向きの三角形が描かれます。この2つの三角形を組み合わせることで、完全な菱形になります。
実行結果
Enter number of rows: 4 * *** ***** ******* ***** *** *
行数として「4」を入力すると、上記のように7段の菱形パターンが出力されます。入力する数値を変えれば、任意の大きさの菱形を自由に生成できます。
-
C++で二分木の奇数レベルにあるノードを出力するプログラム
このチュートリアルでは、与えられた二分木(バイナリツリー)の中から、奇数レベルに存在するノードを出力するC++プログラムについて解説します。 本プログラムでは、ルートノードのレベルを「1」と定義し、それ以降のレベルは交互にカウントしていきます。つまり、レベル1・3・5…といった奇数番目の階層に属するノードが出力の対象となります。 例として、以下のような二分木が与えられた場合を考えてみましょう。 この二分木の場合、奇数レベルに存在するノードは 1, 4, 5, 6 となります。 アルゴリズムの考え方 実装には再帰呼び出しを利用します。ルートから探索を開始し、現在のレベルが奇数かどうかをブール
-
C++で中空ピラミッドとダイヤモンドパターンを出力するプログラムの作り方
この記事では、C++を使って中空(ホロー)のピラミッドとダイヤモンドのパターンを生成する方法を解説します。塗りつぶし(ソリッド)のピラミッドパターンは比較的簡単に作成できますが、中空にするにはいくつかの工夫が必要です。ポイントは、ループと条件分岐を組み合わせて「星を出す位置」と「空白を入れる位置」を制御することです。 中空ピラミッドの出力 ピラミッドでは、1行目に星(*)を1つだけ出力し、最終行にはn個の星を連続して出力します。それ以外の行では、行頭と行末にちょうど2つの星を出力し、その間は空白で埋めます。これにより、輪郭だけの中空ピラミッドが完成します。 サンプルコード #include &