C++を使って「1」の外枠と内側に「0」を表示するボックスパターンを出力する方法
この記事では、行数と列数の値が与えられたとき、1行目・1列目・最終行・最終列に「1」を、それ以外の要素には「0」を出力するボックス状のパターンを作成する方法を解説します。
出力イメージ
入力:rows = 5, columns = 4
出力:
1 1 1 1
1 0 0 1
1 0 0 1
1 0 0 1
1 1 1 1
入力:rows = 8, columns = 9
出力:
1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1
このように、外周だけが「1」で構成され、内部が「0」で埋められた四角形のパターンを目指します。
解決のアプローチ
もっともシンプルな方法は、すべての行と列を順番に走査し、現在参照している要素が1行目・最終行・1列目・最終列のいずれかに該当するかどうかを判定することです。該当していれば「1」を、境界の内側であれば「0」を出力します。この条件分岐を繰り返すことで、目的のボックスパターンを簡単に描画できます。
判定条件の考え方
- 行番号 i が 1 または rows(最終行)と一致 → 外周
- 列番号 j が 1 または columns(最終列)と一致 → 外周
- 上記以外 → 内側なので「0」
C++での実装例
#include <bits/stdc++.h>
using namespace std;
// パターンを出力する関数
void create_pattern(int rows, int columns) {
int i, j;
for (i = 1; i <= rows; i++) {
for (j = 1; j <= columns; j++) {
// 要素が最初/最後の行、または最初/最後の列にあるか判定
if (i == 1 || i == rows || j == 1 || j == columns) {
cout << " 1";
} else {
cout << " 0";
}
}
cout << "\n";
}
return;
}
int main() {
int no_of_rows = 7;
int no_of_columns = 8;
create_pattern(no_of_rows, no_of_columns);
return 0;
}
実行結果
1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1
コードの解説
- create_pattern() 関数に行数と列数の値を渡して呼び出します。
- 外側のループ
for (i = 1; i <= rows; i++)は、1からrowsまで各行を順に処理します。 - 内側のループ
for (j = 1; j <= columns; j++)は、1からcolumnsまで各列を順に処理します。 - 条件式
(i == 1 || i == rows || j == 1 || j == columns)を用いて、その要素が最初/最後の行または最初/最後の列に位置しているかを判定し、該当すれば 「1」、そうでなければ 「0」 を出力します。
このアルゴリズムの計算量は O(rows × columns) であり、行列全体を一度走査するだけで済むため非常に効率的です。追加のメモリも不要な点が魅力です。
まとめ
この記事では、与えられた行数・列数をもとに、「0」の中に「1」の枠を持つボックスパターンを出力する問題を解きました。条件分岐と二重ループを組み合わせるだけで実装できる、初心者にもわかりやすい良い練習問題です。同じロジックは C言語、Java、Python など他のプログラミング言語でも簡単に応用できますので、ぜひ試してみてください。
-
C++で列車の停車駅の組み合わせ数を求める方法
地点XとYの間にはn個の中間駅があるとします。ここで、「どの2つの停車駅も隣り合わない」という条件のもとで、s個の駅に停車する列車の配置方法が何通りあるかを求める問題を考えてみましょう。この記事では、停車駅の組み合わせ数を求めるためのアプローチを段階的に詳しく解説します。この問題は、本質的には組合せ論の問題であり、s個の停車駅の選び方の総数を求めることになります。 問題を解くアプローチ まず具体例として、中間駅が8個あり、そのうち3個の駅に停車させたい場合を考えてみます。 n = 8, s = 3 このとき、列車が停車できない駅は(n − s)、つまり5個残ることになります。 停車できない
-
C++で楕円の面積を求めるプログラムの作成方法
この記事では、C++を使って楕円(だえん)の面積を求める方法を解説します。楕円にはいくつかの重要な構成要素があり、それぞれの意味を理解しておくと計算の仕組みがより明確になります。楕円の主な構成要素要素説明中心楕円の中心点。2つの焦点を結ぶ線分の中点でもあります。長軸楕円における最も長い直径です。短軸楕円における最も短い直径です。弦楕円上の2点を結ぶ線分のことです。焦点楕円を定義する2つの特別な点。図中に示された2点が該当します。通径焦点を通り、長軸に対して垂直な直線(線分)のことです。楕円の面積の公式楕円の面積は、長半径 a と短半径 b を使って次の式で表されます。面積 = π × a ×