三角マッチ棒数を求めるC/C++プログラムの解説と実装例
三角マッチ棒数とは
マッチ棒を正三角形の形に並べて作った三角形のことを「三角マッチ棒数(Triangular Matchstick Number)」と呼びます。三角マッチ棒数とは、そのマッチ棒の三角形を作るために必要なマッチ棒の本数を指します。
問題の概要
この問題では、マッチ棒で作るピラミッドの段数 X が与えられます。そして、X 段のマッチ棒ピラミッドを構成するために必要なマッチ棒の最小総本数を出力するプログラムを作成するのが課題です。
概念をより明確にするために、具体例を見てみましょう。
入力: 7 出力: 84
解法の考え方
この問題は、三角数(Triangular Number)の拡張として考えることができます。三角数とは 1 + 2 + 3 + … + n の総和で、n 番目の三角数は n*(n+1)/2 という公式で表されます。
整数 X が与えられたとき、必要なマッチ棒の本数は X 番目の三角数の 3 倍、すなわち次の式で求められます。
(3 * X * (X + 1)) / 2
例えば X = 7 の場合、(3 * 7 * 8) / 2 = 84 本となり、これは出力例と一致します。
C++での実装例
#include <iostream>
using namespace std;
int main() {
int x = 7;
cout << (3 * x * (x + 1)) / 2;
return 0;
}このプログラムは、段数 x に対して公式 (3 * x * (x + 1)) / 2 を適用し、必要なマッチ棒の総本数を標準出力に表示します。x = 7 の場合、出力は 84 になります。
まとめ
三角マッチ棒数の問題は、三角数の知識を応用することで O(1) の計算量で解くことができます。段数 X が与えられれば、公式 (3 * X * (X + 1)) / 2 を使って即座に答えを求められるため、ループ処理は一切不要です。
-
C++で16進数を10進数に変換するプログラムの作成方法
16進数が入力として与えられたとき、その16進数を10進数に変換するのが本記事のテーマです。 コンピュータにおける16進数は基数16で表現され、10進数は基数10で表現されます。10進数では0〜9の数字のみを使用しますが、16進数では0〜15までの値を扱うことができ、10以上の値はそれぞれA(10)、B(11)、C(12)、D(13)、E(14)、F(15)という英字で表されます。 16進数から10進数への変換手順 16進数を10進数に変換するには、以下の手順に従います。 右端の桁から順に数字を取り出し、0から始まるべき乗を掛けていきます。指数は「桁数 − 1」になるまで1ずつ増やします。
-
マッチ棒ピラミッドに必要な本数を求めるPythonプログラム
この記事では、以下の問題文に対する解決策について学んでいきます。 問題文 ある整数 X が与えられます。X はマッチ棒で作るピラミッドの段数を表しています。X 段のマッチ棒ピラミッドを完成させるために必要な、マッチ棒の総本数を求めて表示してください。 考え方 マッチ棒で正三角形を組み上げていく場合、1辺に n 本のマッチ棒を使用するとき、必要なマッチ棒の総数は「3 × n × (n + 1) ÷ 2」で表されます。この公式を利用することで、x 段のピラミッド全体に必要なマッチ棒の総本数を簡単に計算することができます。 実装例 # 関数の定義 def numberOfSticks(x):