n枚のコインで作れるピラミッドの最大の高さを求めるC/C++プログラム
この記事では、n枚のコインを使って作れるピラミッドの最大の高さを求める方法と、そのC/C++による実装例を解説します。
問題の概要
n枚のコインが与えられ、それらを最大の高さになるようにピラミッド状に積み上げます。配置のルールは以下のとおりです。
- 1段目(最上段)には1枚目のコインを置く
- 2段目には2枚目・3枚目のコインを置く
- 以降も同様に、k段目にはk枚のコインを置く
たとえば次の図のように、6枚のコインで高さ3のピラミッドが完成します。高さ4にするためには合計10枚のコインが必要になります。

高さを求める公式
k段目までに必要なコインの総数は「三角数」と呼ばれ、次の式で表されます。
N = H × (H + 1) / 2
この式をHについて解くことで、コインの枚数Nからピラミッドの高さHを直接求められます。
H = { (-1 + √(1 + 8N)) / 2 }
入出力例
Input: n = 10 Output: Height of pyramid: 4
解説
上記の公式に n = 10 を代入すると、H = (-1 + √(1 + 80)) / 2 = (-1 + 9) / 2 = 4 となり、正しく高さ4が得られます。実際、1 + 2 + 3 + 4 = 10 枚でちょうど4段のピラミッドが完成します。
C++での実装例
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int n = 10;
int height = (-1 + sqrt(1 + 8 * n)) / 2;
cout << "Height of pyramid: " << height;
}
実装のポイント
sqrt関数を使用するため、<math.h>(または<cmath>)をインクルードします。- 平方根の結果を整数型に代入することで、小数点以下が切り捨てられ、作成可能な最大の高さが求まります。
- 計算量はO(1)であり、コインの枚数に関わらず高速に答えを求められます。
-
コインを三角形(ピラミッド状)に配置したときの最大の高さを求めるC/C++プログラム
コインを三角形(ピラミッド状)に積んだときの最大の高さ この記事では、少し頭を使う興味深い問題を紹介します。N枚のコインが与えられたとき、それらをピラミッド状に並べた場合に作れる最大の高さを求めるという問題です。この配置方法では、1段目に1枚、2段目に2枚、3段目に3枚というように、段が下がるごとにコインを1枚ずつ増やしながら積み上げていきます。 図の例を見てみましょう。高さ3のピラミッドを作るには、最低でも6枚のコインが必要です。同様に、高さ4のピラミッドには10枚のコインが必要になります。つまり、コインが13枚あれば高さ4までは作れますが、高さ5に必要な15枚には届かないため、最大の高さ
-
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ずつ増やします。