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

【C++】配列内の隣接する要素同士の絶対差を求める方法

この記事では、配列内の隣接する2つの要素のペアごとに絶対差(絶対値の差)を求める方法を解説します。配列に n 個の要素が含まれている場合、結果として得られる配列には n-1 個の要素が格納されます。

例えば、配列の要素が {8, 5, 4, 3} である場合、計算結果は次のようになります。

|8−5| = 3、|5−4| = 1、|4−3| = 1

アルゴリズム

pairDiff(arr, n)

begin
   res := 結果を格納するための配列
   for i in range 0 to n-2, do
      res[i] := |arr[i] − arr[i+1]|
   done
end

C++での実装例

#include<iostream>
#include<cmath>
using namespace std;
void pairDiff(int arr[], int res[], int n) {
   for (int i = 0; i < n-1; i++) {
      res[i] = abs(arr[i] - arr[i+1]);
   }
}
main() {
   int arr[] = {14, 20, 25, 15, 16};
   int n = sizeof(arr) / sizeof(arr[0]);
   int res[n-1];
   pairDiff(arr, res, n);
   cout << "差の配列: ";
   for(int i = 0; i<n-1; i++) {
      cout << res[i] << " ";
   }
}

実行結果

差の配列: 6 5 10 1

コードの解説

このプログラムでは、関数 pairDiff() が元の配列 arr と結果を格納する配列 res、そして要素数 n を受け取ります。ループ処理の中で、現在の要素 arr[i] と次の要素 arr[i+1] の差を abs() 関数(cmath ヘッダーで定義)を使って絶対値として計算し、res[i] に順番に代入していきます。

入力配列 {14, 20, 25, 15, 16} の場合、各ペアの絶対差は |14−20| = 6、|20−25| = 5、|25−15| = 10、|15−16| = 1 となるため、出力は「6 5 10 1」になります。

計算量は配列を一度だけ走査するため O(n) であり、非常に効率的なアルゴリズムです。

  1. 【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説明: 配列内の

  2. C++で配列の偶数・奇数インデックス要素の絶対差を求める方法

    この記事では、配列内の偶数インデックスと奇数インデックスにある要素の絶対差を求める方法を解説します。絶対差とは、2つの値の差が負になった場合にも絶対値を取ることを指します。 例として、配列 {1, 2, 3, 4, 5, 6, 7, 8, 9} を考えてみましょう。インデックスは0から始まるため、各要素は次のように分類されます。 偶数インデックス(0, 2, 4, 6, 8)の要素:1, 3, 5, 7, 9奇数インデックス(1, 3, 5, 7)の要素:2, 4, 6, 8 計算の手順 まず初期値0から出発し、該当するインデックスの要素を順番に見ながら、直前の累積値との差の絶対値を求めていき