0を中心とした鏡像の三角形パターンを出力するC++プログラム
正の整数 n が与えられたとき、数字が 0 を中心として左右対称(鏡像)に並ぶ三角形パターンを生成し、その結果を表示します。
例
入力 -: n = 6 出力 -:

入力 -: n = 3 出力 -:

パターンの仕組み
このパターンでは、各行の数字が中央に向かって 0 から順に増加し、中央を境に再び 0 へと減少していきます。行が下に進むごとに数字の数は 2 つずつ増え、全体としてピラミッド型の鏡像パターンが形成されます。この対称的な数列は、abs(k - temp2) のように絶対値を利用することで簡単に生成できます。
以下のプログラムで使用しているアプローチは次のとおりです −
- n の値を正の整数として入力する
- パターンの行数(n 行)を制御するループ i を回す
- パターン内の空白(スペース)の数を制御するループ j を回す
- パターン内の数字を制御するもう一つのループを回す
アルゴリズム
START
Step 1-> 三角形パターンの鏡像を表示する関数を宣言する
void print_mirror(int n)
int temp = 1、temp2 = 1 を宣言して初期化
int i = 0、i < n、i++ のループ
int j = n - 1、j > i、j-- のループ
スペースを表示
終了
int k = 1、k <= temp、k++ のループ
abs(k - temp2) を表示
終了
temp に 2 を加算
temp2 をインクリメント
改行(\n)を表示
Step 2-> main() 内で
int n = 6 を宣言
print_mirror(n) を呼び出す
STOP
サンプルコード
#include <bits/stdc++.h>
using namespace std;
// 三角形パターンの鏡像を表示する関数
void print_mirror(int n) {
int temp = 1, temp2 = 1;
for (int i = 0; i < n; i++) {
for (int j = n - 1; j > i; j--) {
cout << " ";
}
for (int k = 1; k <= temp; k++) {
cout << abs(k - temp2);
}
temp += 2;
temp2++;
cout << "\n";
}
}
int main() {
int n = 6;
print_mirror(n);
return 0;
}
コードの解説
変数 temp は各行に表示する数字の個数を管理し、行が進むごとに 2 ずつ増加します。変数 temp2 は中央の数字(ピーク値)を表し、1 ずつ増加していきます。内側のループでは abs(k - temp2) を出力することで、0 から中央値まで増加し、その後再び 0 まで減少する対称的な数列が実現されます。また、最初の内側のループは行番号に応じてスペースを出力し、パターンを中央に揃える役割を担っています。
出力

-
C++でピラミッドの体積を計算するプログラムの作り方|底面の形状別の公式と実装例
ピラミッドの底面の種類に応じた辺の長さが与えられたとき、そのピラミッドの体積を計算するのが本記事のテーマです。 ピラミッドとは、外側の面がすべて三角形で構成され、それらが共通の一点(頂点)で交わることで鋭い角を形成する3次元図形です。ピラミッドの体積は、底面がどのような形状であるかによって異なります。 ピラミッドの底面にはさまざまな種類があり、代表的なものは以下の通りです。 底面の形状別の体積の求め方 三角形の底面(三角錐) 底面が三角形の場合、ピラミッドの体積は次の公式で求められます。 体積 = (1/6) × a × b × h 正方形の底面(四角錐) 底面が正方形の場合、ピラミッドの体
-
C++で学ぶクイックソート(QuickSort)の仕組みと実装方法
クイックソートとはクイックソート(Quicksort)は、比較に基づいて未ソートのリスト(配列)を並べ替えるソートアルゴリズムの一つです。「パーティション交換ソート(partition exchange sort)」とも呼ばれます。クイックソートは安定ソートではありません。これは、等しい値を持つ要素同士の相対的な順序が保持されないためです。ただし、配列に対してごくわずかな追加メモリだけで動作するため、メモリ効率に優れています。選択ソートと非常に似ていますが、常に最悪のパーティションを選んでしまうわけではない点が異なり、より洗練された形の選択ソートと捉えることもできます。クイックソートは最も効率