C++で逆ダイヤモンドパターンを出力するプログラムの作り方を解説
はじめに
このチュートリアルでは、C++を使って逆ダイヤモンドパターンをコンソールに出力するプログラムについて解説します。
入力として整数 N が与えられ、高さが 2N-1 行となる逆ダイヤモンド型のパターンを表示するのが目標です。星印(*)と空白を組み合わせて、中央がくぼんだ美しい逆ダイヤモンドの形を作り上げます。
パターンの構造を理解する
逆ダイヤモンドパターンは、上半分と下半分の2つの部分に分けて考えると理解しやすくなります。
- 上半分: 行が下に進むごとに、左右の星(*)が1つずつ減り、中央の空白が2つずつ広がっていきます。
- 下半分: 上半分とは逆に、行が進むごとに星が1つずつ増え、中央の空白が2つずつ狭まっていきます。
各行は「左側の三角形」「中央の空白」「右側の三角形」という3つのパーツで構成されており、それぞれを独立したforループで出力します。
C++サンプルコード
#include<bits/stdc++.h>
using namespace std;
// 逆ダイヤモンドパターンを出力する関数
void printDiamond(int n){
cout<<endl;
int i, j = 0;
// 上半分のループ
for (i = 0; i < n; i++) {
// 左側の三角形
for (j = i; j < n; j++)
cout<<"*";
// 中央の空白部分
for (j = 0; j < 2 * i + 1; j++)
cout<<" ";
// 右側の三角形
for (j = i; j < n; j++)
cout<<"*";
cout<<endl;
}
// 下半分のループ
for (i = 0; i < n - 1; i++) {
// 左側の三角形
for (j = 0; j < i + 2; j++)
cout<<"*";
// 中央の空白部分
for (j = 0; j < 2 * (n - 1 - i) - 1; j++)
cout<<" ";
// 右側の三角形
for (j = 0; j < i + 2; j++)
cout<<"*";
cout<<endl;
}
cout<<endl;
}
int main(){
int n = 5;
printDiamond(n);
return 0;
}
実行結果
N = 5 を指定して実行した場合、以下のような出力が得られます。
***** ***** **** **** *** *** ** ** * * ** ** *** *** **** **** ***** *****
コードの解説
このプログラムのロジックを、上半分と下半分に分けて詳しく見ていきましょう。
上半分の出力ロジック
i 番目の行(0始まり)では、次の要素を出力します。
- 左右それぞれに (n - i) 個の星(*)
- 中央に (2i + 1) 個の空白
これにより、行が進むごとに星が減り、中央の空白が広がっていく形状が実現されます。
下半分の出力ロジック
i 番目の行(0始まり)では、上半分とは逆の処理を行います。
- 左右それぞれに (i + 2) 個の星(*)
- 中央に 2(n - 1 - i) - 1 個の空白
下半分は n - 1 行で構成されているため、全体の行数は n + (n - 1) = 2n - 1 行となり、要件どおりの高さになります。
計算量について
各行の出力には最大 O(n) の処理が必要となるため、プログラム全体の時間計算量は O(n²) です。
まとめ
本記事では、C++で逆ダイヤモンドパターンを出力する方法を解説しました。ネストしたforループを組み合わせることで、複雑に見えるパターンもシンプルに実装できます。この考え方は、ピラミッド型やひし形など、他のパターン出力問題にも応用できるので、ぜひマスターしておきましょう。
-
C言語でダイヤモンドパターンを出力するプログラム
プログラムの概要 ダイヤモンドパターンは、正ピラミッドパターンと逆ピラミッドパターンを組み合わせたものです。上半分は数字が増えていくピラミッド形状、下半分はそれが逆さになった形状を出力することで、全体としてダイヤモンド(ひし形)が描かれます。 アルゴリズム このプログラムでは、1から始まる連続した数字を使ってダイヤモンド型のパターンを表示します。各行の出力内容は以下のとおりです。 1行目:1 を表示 2行目:1,2,3 を表示 3行目:1,2,3,4,5 を表示 4行目:1,2,3,4,5,6,7 を表示 5行目:1,2,3,4,5,6,7,8,9 を表示 6行目以降:5行目から4行目までの
-
C++で中空ピラミッドとダイヤモンドパターンを出力するプログラムの作り方
この記事では、C++を使って中空(ホロー)のピラミッドとダイヤモンドのパターンを生成する方法を解説します。塗りつぶし(ソリッド)のピラミッドパターンは比較的簡単に作成できますが、中空にするにはいくつかの工夫が必要です。ポイントは、ループと条件分岐を組み合わせて「星を出す位置」と「空白を入れる位置」を制御することです。 中空ピラミッドの出力 ピラミッドでは、1行目に星(*)を1つだけ出力し、最終行にはn個の星を連続して出力します。それ以外の行では、行頭と行末にちょうど2つの星を出力し、その間は空白で埋めます。これにより、輪郭だけの中空ピラミッドが完成します。 サンプルコード #include &