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

C++を使ってAとBの間のN個の相加平均(等差中項)を求める方法


問題の概要

3つの整数 A、B、N が与えられたとき、A と B の間に N 個の相加平均(等差中項)を挿入することを考えます。例えば、A = 20、B = 32、N = 5 の場合、出力は「22, 24, 26, 28, 30」になります。

解法の考え方

この課題は非常にシンプルです。A を初項、B を末項とする等差数列の中に、N 個の要素を挿入すればよいのです。

挿入する N 個の相加平均を A1, A2, …, An とすると、数列全体は次のようになります。

A, A1, A2, …, An, B

このとき、B は数列の (N + 2) 番目の項に相当します。したがって、等差数列の一般項の公式から以下のように表せます。

B = A + (N + 2 − 1) × d
B − A = (N + 1) × d
d = (B − A) / (N + 1)

ここで d は公差です。この公式を使えば、A と B の間に挿入すべき各項を順番に計算できます。

C++での実装例

#include<iostream>
using namespace std;

void showMeans(int A, int B, int N) {
    // 公差 d を求める(小数になる場合もあるため float 型を使用)
    float d = (float)(B - A) / (N + 1);
    for (int i = 1; i <= N; i++)
        cout << (A + i * d) << " ";
}

int main() {
    int A = 20, B = 40, N = 5;
    showMeans(A, B, N);
}

コードのポイント

  • 公差 d の計算では、B − A が N + 1 で割り切れない場合にも対応できるよう、明示的に float 型へキャストしています。
  • ループ変数 i を 1 から N まで回し、「A + i × d」を順に出力することで、A と B の間の各相加平均を求めています。
  • A と B 自体は出力対象外で、その間の N 個の値のみを表示します。

実行結果

23.3333 26.6667 30 33.3333 36.6667

このように、A = 20、B = 40、N = 5 の場合、公差は (40 − 20) / 6 ≒ 3.3333 となり、20 と 40 の間に等間隔で並ぶ 5 つの値が出力されます。整数以外の結果も正しく扱えるため、任意の A、B、N の組み合わせに柔軟に対応できる実装となっています。

  1. C++でax + by = nを満たすxとyを求める方法

    この問題では、3つの整数値 a、b、n が与えられます。私たちのタスクは、ax + by = n を満たす x と y を見つけることです。問題の理解まず、具体例を見て問題を把握しましょう。入力 : a = 4, b = 1, n = 5出力 : x = 1, y = 1この場合、4 × 1 + 1 × 1 = 5 となり、確かに方程式を満たしています。解法のアプローチこの問題に対するシンプルな解決策は、0 から n までの範囲で方程式を満たす値を順に探していくことです。これを実現するために、方程式を次のように変形します。x = (n − by) / ay = (n − ax) / bx の候

  2. C++とオイラー特性でサッカーボールの五角形・六角形の数を求める方法

    サッカーボールをよく見ると、黒い五角形と白い六角形がパズルのように組み合わさり、完璧な球体を形作っていることがわかります。本記事では、オイラー特性(Euler characteristic)という数学的手法を用いて、サッカーボール上に存在する五角形と六角形の数を求める方法を解説し、最後にC++での実装例も紹介します。 オイラー特性とは オイラー特性とは、位相空間における図形や構造の特徴を表す数値です。球面の場合、オイラー特性は常に2になることが知られており、この性質を利用することで、サッカーボール上の五角形と六角形の数を計算できます。 オイラー特性では、以下の要素を使用します。 χ(S) —