C++
 Computer >> コンピューター >  >> プログラミング >> C++

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ループを組み合わせることで、複雑に見えるパターンもシンプルに実装できます。この考え方は、ピラミッド型やひし形など、他のパターン出力問題にも応用できるので、ぜひマスターしておきましょう。

  1. 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行目までの

  2. C++で中空ピラミッドとダイヤモンドパターンを出力するプログラムの作り方

    この記事では、C++を使って中空(ホロー)のピラミッドとダイヤモンドのパターンを生成する方法を解説します。塗りつぶし(ソリッド)のピラミッドパターンは比較的簡単に作成できますが、中空にするにはいくつかの工夫が必要です。ポイントは、ループと条件分岐を組み合わせて「星を出す位置」と「空白を入れる位置」を制御することです。 中空ピラミッドの出力 ピラミッドでは、1行目に星(*)を1つだけ出力し、最終行にはn個の星を連続して出力します。それ以外の行では、行頭と行末にちょうど2つの星を出力し、その間は空白で埋めます。これにより、輪郭だけの中空ピラミッドが完成します。 サンプルコード #include &