-
C++で水槽にn個の球体ボールを沈めたときに水が溢れるかどうかを判定するプログラム
円柱形の水槽の半径と高さ、沈める球体ボールの個数「n」とそれぞれの半径、さらに水槽内の現在の水量が与えられたとき、ボールをすべて水槽に沈めた際に水が溢れる(オーバーフローする)かどうかを判定するのが本記事の目的です。体積を求める公式円柱(水槽)の場合3.14 * r * r * hここで、rは水槽の半径、hは水槽の高さを表します。球体(ボール)の場合(4/3) * 3.14 * R * R * Rここで、Rは球体ボールの半径を表します。入力例tank_height = 5 tank_radius = 2 water_volume = 10 capacity = 10 ball_radius =
-
C++で自然数の加重平均を求めるプログラムの実装方法
自然数の配列と、各自然数に対応する重みを格納したもう1つの配列が与えられたとき、これらの自然数の加重平均(重み付き平均)を求めることを考えます。加重平均の計算式加重平均は、次の式を使って計算できます。$$\overline{x}=\frac{\displaystyle\sum\limits_{i=1}^n (x_{i}\cdot w_{i})}{\displaystyle\sum\limits_{i=1}^n w_{i}}$$ここで、x は自然数、w はその自然数に対応する重みを表します。つまり、「各値と重みの積の総和」を「重みの総和」で割ることで求められます。入出力例例1入力X[] = {1
-
C++で解く!3番目のプレイヤーのサイコロが最大の目となる確率の求め方
3人のプレイヤーA、B、Cが順番にサイコロを投げる場面を考えます。本記事では、Cが投げた目がAとBの両方よりも大きくなる確率を求める方法を解説します。3番目のサイコロの目が、それまでの2つの目より大きくなる確率を計算するには、この条件をしっかり意識することが重要です。例えば、Aが「2」を出し、Bが「3」を出したとしましょう。このときCがこれらより大きい値を出せるのは「4」「5」「6」の3通りだけです。したがって、確率は3/6=1/2となります。入出力例入力:A = 3, B = 5出力:1/6説明: 3と5の両方よりも大きい値は「6」のみであるため、確率は1/6となります。入力:A = 2,
-
C++でN+1日目の降雨確率を計算する方法
0と1が格納された配列が与えられます。ここで、0は雨が降らなかった日、1は雨の日を表します。この記事では、過去のデータをもとにN+1日目(翌日)に雨が降る確率をC++で計算する方法を解説します。計算式N+1日目に雨が降る確率は、次のシンプルな式で求めることができます。確率 = 配列内の雨の日の総数 ÷ 配列内の全日数入力例と出力例入力arr[] = {1, 0, 0, 0, 1}出力n+1日目の降雨確率 : 0.4解説雨の日と雨でない日の合計:5日 1で表される雨の日の数:2日 N+1日目の降雨確率:2 / 5 = 0.4入力arr[] = {0, 0, 1, 0}出力n+1日目の降雨確率 :
-
【C++】2歩または3歩ずつ進むとき指定地点に到達する確率を求める方法
人物「A」が開始位置 X = 0 から歩き始めます。この課題では、一度に2歩または3歩ずつ進むことができる場合に、ちょうど X = num の地点に到達する確率を求めます。ステップ長が2である確率を P、ステップ長が3である確率を 1 − P とします。 入力例 num = 5, p = 0.2 出力例 0.32 説明 num = 5 に到達する方法は2通りあります。 2+3 の順に進む場合:確率 0.2 × 0.8 = 0.16 3+2 の順に進む場合:確率 0.8 × 0.2 = 0.16 したがって、合計確率は 0.16 + 0.16 = 0.32 となります。 別の例も見てみましょう。
-
C++でランダムに折った棒の断片からn角形を作れる確率を求める方法
問題概要任意の長さの棒があり、その棒をランダムに n 個の断片(整数値または浮動小数点数)に分割することを考えます。このとき、分割された断片が n 角形(多角形)を形成できる確率を求めるのが本記事の目的です。多角形が成立するためには、どの一辺も他のすべての辺の合計より短くなければなりません。この条件を満たす確率は、次の公式で計算できます。P(E′) = 1 − P(E) = 1 − n / 2n−1ここで、n は棒を分割した際に生成される断片の本数です。入力例と出力例入力 length = 10 , pieces = 4出力
-
C++で配列内の隣接ペア要素の積をすべて求める方法
問題概要n個の整数からなる配列 arr[n] が与えられたとき、隣接する2つの要素(ペア)の積をすべて求めるのが課題です。配列 arr[] における「隣接要素」とは、i番目の要素 arr[i] に着目したとき、直後の要素 arr[i+1] または直前の要素 arr[i-1] を指します。したがって、求める積は arr[i] × arr[i+1]、あるいは arr[i] × arr[i-1] となります。入力例 1arr[] = {1, 2, 3, 4}出力例 12, 6, 12説明ペアに分解すると {1,2}、{2,3}、{3,4} それぞれの結果は 1×2 = 2、2×3 = 6、3×4 =
-
C++で配列内のすべての合成数の積を求める方法
n 個の整数で構成される配列 arr[n] が与えられたとき、配列内に含まれるすべての「合成数」の積を求めるのが本稿のテーマです。 合成数とは、1 と自分自身以外にも約数を持つ正の整数、すなわち 2 つの整数を掛け合わせて作ることができる数のことです。たとえば 6 は 2 × 3 で表せるため合成数であり、素数ではありません。逆に言えば、合成数とは「素数ではない数」とも定義できます。 入力例と出力例 入力 arr[] = {1, 2, 4, 5, 6, 7} 出力 24 説明: 配列内の合成数は 4 と 6 のみで、その積は 4 × 6 = 24 となります。 入力 arr[] = {10,
-
C++で配列内の指定した数Kで割り切れる要素の積を求める方法
整数がn個格納された配列arr[n]と整数kが与えられたとき、配列arr[]の中でkで割り切れるすべての要素の積を求めるのがこの問題の目的です。この問題を解くには、配列の各要素を先頭から順に走査し、その要素がkで完全に割り切れるかどうかを判定します。割り切れた要素はすべて掛け合わせ、その結果を変数に格納していきます。例えば、配列arr[] = {1, 2, 3, 4, 5, 6}、k = 2が与えられた場合、2で割り切れる要素は2、4、6の3つであり、それらの積は48となります。それでは、入力に対してどのような出力が期待されるのか、具体例で確認してみましょう。入力arr[] = {10, 11
-
C++で最初のn個の自然数の立方和を求めるプログラム
はじめに整数 n が与えられたとき、「最初の n 個の自然数の立方和」を求めるのが本記事の目的です。つまり、1 から n までの各自然数を 3 乗し、その結果をすべて合計する必要があります。任意の n に対して、結果は次の式で表されます。13 + 23 + 33 + … + n3例えば n = 4 の場合、答えは 13 + 23 + 33 + 43 の合計となります。入力例14出力例1100説明1^3 + 2^3 + 3^3 + 4^3 = 100入力例28出力例21296説明1^3 + 2^3 + 3^3 + 4^3 + 5^3 + 6^3 + 7^3 + 8^3 = 1296問題を解くため
-
C++で数値の調和平均を計算するプログラム
自然数の配列が与えられ、その数値群の調和平均を計算して出力することが本記事の課題です。 調和平均とは? 調和平均とは、各要素の逆数を平均し、さらにその逆数を取った値として定義される平均の一種です。速度や比率など、「単位あたりの量」の平均を求めたい場合に特に有効です。 $$Harmonic\: Mean=\frac{n}{\frac{1}{a}+\frac{1}{b}+\frac{1}{c}+...}$$ ここで、n は与えられた要素の総数、a, b, c, … は配列内の実際の要素を表します。 調和平均を計算する手順は以下の通りです − 各要素の逆数を求める すべての逆数を合計する 配列の要
-
C++で平均絶対偏差(MAD)を計算するプログラムの書き方
自然数の配列が与えられ、その平均絶対偏差(Mean Absolute Deviation:MAD)を計算することが課題です。平均絶対偏差とは、各データ点と平均値の差(偏差)の絶対値を取ったものの平均であり、データのばらつき具合を測るための統計量の一つです。これを求めるためには、平均、分散、標準偏差に関する基礎知識が必要となります。 平均絶対偏差を計算するには、以下の手順に従います。 平均を計算する 絶対偏差を計算する 計算したすべての偏差を合計する 公式を適用する 入力例と出力例 入力 arr[] = { 34,21,56,76,45,11} 出力 mean absolute devi
-
C++でソートされていない配列の平均値と中央値を求めるプログラム
はじめに ソートされていない配列が与えられたとき、その平均値(平均)と中央値を計算するのが課題です。本記事では、C++を使ってこれらの統計量を求める方法を、計算式・アルゴリズム・実装例とともにわかりやすく解説します。 平均値の計算方法 平均値は、データ全体の平均的な大きさを表す基本的な指標です。次の式で求めることができます。 平均値 = (配列の全要素の合計) ÷ (要素の総数) 中央値の計算方法 配列がすでにソートされている場合、中央値は次のように定義されます。 要素数が奇数の場合: 配列の中央に位置する要素がそのまま中央値になります。 要素数が偶数の場合: 中央に位置する2つの要素の
-
C++で中心二十面体数を計算するプログラムの作成方法
値 n が与えられたとき、n 番目の中心二十面体数、および n までの中心二十面体数列を生成して結果を表示するのが本記事の目的です。中心二十面体数とは?中心二十面体数(Centered Icosahedral Number)とは、中心付き図形数の一種で、正二十面体(20個の面を持つ多面体)の構造を表現するために用いられる数です。中心に1つの点があり、その周囲に層状に点が配置されていくことで二十面体の形状が形成されます。n = 1000 までの中心二十面体数列の最初のいくつかの値は以下の通りです。1, 13, 55, 147, 309, 561, 923中心二十面体数の計算式中心二十面体数は、次
-
【C++】中心付き九角数とその数列を生成するプログラムの書き方
はじめに整数「n」が与えられたとき、n 番目の中心付き九角数(centered nonagonal number)を求めるとともに、n 項目までの中心付き九角数列を生成して結果を表示するのが本記事の課題です。中心付き九角数とは?中心付き九角数とは、中央に置かれた1個の点を中心として、その周囲に点で描かれる九角形の層が幾重にも積み重なって構成される数です。上図は中心付き九角数 𝑁₂ を表したものです。この値は次の式を使って計算できます。$$Nc(n)=\frac{(3n-2)(3n-1)}{2}$$例えば n = 2 の場合、(3×2−2)×(3×2−1)/2 = 4×5/2 = 10 となり
-
C++で文字列を「+」パターンで行列に出力する方法
文字列 str が与えられたとき、その文字列を行列に「+」パターンで出力する必要があります。「+」パターンを形成するには、行列が正方行列(行数と列数が同じ行列)である必要があります。例えば「Tutor」という文字列が与えられた場合、文字列を中央で交差するように水平方向と垂直方向の両方に出力し、行列の残りの要素はすべて「x」で埋めます。イメージは以下の図の通りです。入力例と出力例入力str[] = {Point}出力入力str[] = {this}出力パターンを作成できません偶数長の文字列では中央にあたる1文字が存在しないため、十字の交点を正しく配置できず、パターンを作成できません。そのため、文
-
C++で最初のN個の階乗の積を10^9+7の剰余で求める方法
問題概要数値 N が与えられたとき、最初の N 個の階乗の積を 1000000007(109 + 7)で割った余りを求めるのが課題です。階乗とは、ある整数以下の正の整数すべて(その数自身を含む)の積のことで、「!」(感嘆符)で表されます。例えば、4! = 4 × 3 × 2 × 1 = 24 となります。つまり、1! から n! まですべて掛け合わせ、その結果を 1000000007 で割った余りを計算することになります。制約1 ≤ N ≤ 1e6入力例 1n = 9出力例 127説明: 1! × 2! × 3! × 4! × 5! × 6! × 7! × 8! × 9! を (1e9 + 7
-
C++で数の約数の積を求めるアルゴリズム
ある整数 n が与えられたとき、そのすべての約数を求め、それらの積を計算して結果として返すことを考えます。これが「数の約数の積を求める」という問題です。約数とは、その数を余りなく割り切ることができる数(1 を含む)のことです。たとえば、6 の約数は 1、2、3、6 です。 このタスクでは、与えられた数のすべての約数を掛け合わせた値を求めます。 入力例と出力例 入力 − n = 18出力 − 5832説明 − 1 × 2 × 3 × 6 × 9 × 18 = 5832 入力 − n = 9出力 − 27説明 − 1 × 3 × 9 = 27 問題を解くためのアプローチ すべての約数を愚直に全探
-
【C++】配列内のすべての素数の積を求める方法
整数型配列 arr[] が与えられたとき、その配列に含まれるすべての素数を見つけ出し、それらの積を計算するのが本記事のテーマです。素数とは、1とその数自身でしか割り切れない正の整数のことです。たとえば、2、3、5、7、11などが素数に該当します。それでは、次の配列を例に解を求めてみましょう。入力: arr[] = { 11, 20, 31, 4, 5, 6, 70 }出力: 1705説明: 配列内の素数は 11、31、5 の3つであり、その積は 11 × 31 × 5 = 1705 となります。入力: arr[] = { 1, 2, 3, 4, 5, 6, 7 }出力: 210説明: 配列内の
-
C++プログラムがクラッシュする原因とは?代表的な5つの理由を解説
C++プログラムの異常動作は、しばしばプログラムのクラッシュ(強制終了)につながります。Segmentation fault(セグメンテーション違反)、Aborted、Floating point exception(浮動小数点例外)といったエラーに遭遇した経験がある方も多いのではないでしょうか。本記事では、C++プログラムがクラッシュする代表的な原因を、サンプルコードとともにわかりやすく解説します。1. 例外(Exception)C++における例外とは、プログラムが異常な状態に遭遇した際に発生する反応のことです。例外がtry-catchブロックによって適切に処理されない場合、プログラムはクラ