C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で最初のN個の自然数の平均を求める方法

この記事では、数値nが与えられたときに最初のN個の自然数の平均を求める方法について解説します。

平均とは、すべての数値の合計をその個数で割った値として定義されます。つまり、最初のN個の自然数の平均は、「1からNまでの自然数の合計」を「N」で割った値ということになります。

問題の例

入力 : N = 23
出力 : 12

説明:

1 + 2 + 3 + ... + 22 + 23 = 276
276 / 23 = 12

解法のアプローチ

平均を求めるためには、以下の基本的な公式を使用します。

Average = sum(N) / N

Average = (1 + 2 + 3 + ... + N) / N

ここで、最初のN個の自然数の合計は、等差数列の和の公式から次のように表せます。

sum = N × (N + 1) / 2

この合計の公式を平均の式に代入すると、次のように簡略化できます。

Average = (N × (N + 1)) / (2 × N) = (N + 1) / 2

この公式を使えば、ループ処理を一切行わずにO(1)の時間計算量で平均を算出できます。Nが非常に大きい場合でも高速に動作するのが大きな利点です。

実装例

以下は、上記の解法の動作を示すC++プログラムです。

#include <iostream>
using namespace std;
float calcAverage(int n) {
   return (float)( ((float)n + 1 )/2 );
}
int main() {
   int N = 45;
   cout<<"最初の "<<N<<" 個の自然数の平均は "<<calcAverage(N);
   return 0;
}

出力結果

最初の 45 個の自然数の平均は 23

まとめ

最初のN個の自然数の平均は、数学的な公式 (N + 1) / 2 を利用することで、シンプルかつ効率的に計算できます。整数同士の除算による切り捨て誤差を防ぐため、コード内では float 型へのキャストを行っている点にも注目してください。

  1. 配列の要素の積の最初の桁を求めるC++プログラム

    はじめにこの記事では、与えられた配列のすべての要素を掛け合わせた積の、最初の桁(最上位の桁)を求めるプログラムについて解説します。例として、次のような配列が与えられたとします。arr = {12, 5, 16}これらの要素の積は、12 × 5 × 16 = 960 となります。したがって、求める結果、つまり積の最初の桁は「9」になります。アルゴリズム変数 prod を 1 で初期化するループを使い、配列の各要素を順番に prod に掛けていくprod が 10 以上である間、prod を 10 で割り続ける残った一桁の値が、積の最初の桁となるサンプルコード#include <bits/s

  2. PHPで最初のn個の偶数の平均を求めるプログラム

    はじめに 最初のn個の偶数(2、4、6、8、…、2n)の平均は、実はとてもシンプルな式で表すことができます。偶数の合計は 2 + 4 + … + 2n = n(n + 1) となるため、これを個数 n で割ると、平均は必ず n + 1 になります。 この数学的性質を活かせば、ループで合計を計算する必要すらなく、定数時間 O(1) で答えを導き出せます。以下がそのPHPコードです。 サンプルコード <?php function even_nums_avg($val) {     return $val + 1; } $val = 11; print_