C++で長方形のパターンを出力するプログラムの作成方法
このチュートリアルでは、指定された長方形のパターンを出力するC++プログラムについて解説します。
プログラムには、長方形の高さ(height)と幅(width)が与えられます。私たちのタスクは、これらの寸法をもとに「@」文字を使用して長方形をコンソールに出力することです。
アルゴリズムの考え方
長方形の外枠だけを描くため、以下の条件に当てはまる位置にのみ「@」を出力します。
- 1行目または最終行(i == 0 または i == h-1)
- 1列目または最終列(j == 0 または j == w-1)
それ以外の内側の位置には空白文字を出力します。この条件判定により、塗りつぶしではなく輪郭だけの長方形が描けます。
サンプルコード
#include<iostream>
using namespace std;
void print_rec(int h, int w){
for (int i = 0; i < h; i++){
cout << "\n";
for (int j = 0; j < w; j++){
if (i == 0 || i == h-1 ||
j == 0 || j == w-1)
cout << "@";
else
cout << " ";
}
}
}
int main(){
int h = 5, w = 4;
print_rec(h, w);
return 0;
}実行結果
@@@@ @ @ @ @ @ @ @@@@
コードの解説
関数 print_rec() は、引数として受け取った高さ h と幅 w をもとに、二重のforループで行と列を順番に走査します。
外側のループは行(縦方向)を、内側のループは列(横方向)を制御しています。現在の位置が長方形の端(上下左右のいずれかの境界)であれば「@」を、それ以外であれば空白を出力します。
このプログラムの時間計算量は O(h × w)、空間計算量は O(1) であり、非常に効率的です。
-
C++で解く長方形エリアII ― 座標圧縮と走査線法による被覆面積の計算
問題概要 軸に平行な長方形のリストが与えられるものとします。各 rectangle[i] = {x1, y1, x2, y2} において、(x1, y1) は i 番目の長方形の左下隅の座標、(x2, y2) は右上隅の座標を表します。 求めたいのは、平面上でこれらすべての長方形が覆っている領域の合計面積です。答えは非常に大きな値になる可能性があるため、109 + 7 で割った余りを返すことになっています。 たとえば、入力が次のような場合を考えてみましょう。 このとき、出力は 6 となります。 解法の方針:座標圧縮+走査線(スイープライン) この問題は、座標圧縮(座標の離散化)と走査線法(
-
C++で中空ピラミッドとダイヤモンドパターンを出力するプログラムの作り方
この記事では、C++を使って中空(ホロー)のピラミッドとダイヤモンドのパターンを生成する方法を解説します。塗りつぶし(ソリッド)のピラミッドパターンは比較的簡単に作成できますが、中空にするにはいくつかの工夫が必要です。ポイントは、ループと条件分岐を組み合わせて「星を出す位置」と「空白を入れる位置」を制御することです。 中空ピラミッドの出力 ピラミッドでは、1行目に星(*)を1つだけ出力し、最終行にはn個の星を連続して出力します。それ以外の行では、行頭と行末にちょうど2つの星を出力し、その間は空白で埋めます。これにより、輪郭だけの中空ピラミッドが完成します。 サンプルコード #include &