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

C++で関数の値がAに最も近い数値をリストから検索する方法

関数 F(n) = P − (0.006 × n) があるとします。ここで P はあらかじめ与えられた定数です。さらに、整数のリストと数値 A が与えられたとき、リストの中から「F(n) の値が A に最も近くなる」要素を見つけるのがこの問題の目的です。

例として、P = 12、A = 5、リストが {1000, 2000} の場合を考えてみましょう。まず、F(1000) = 12 − (0.006 × 1000) = 6、次に F(2000) = 12 − (0.006 × 2000) = 0 と計算できます。A = 5 に最も近い値は 6 であるため、答えは 1000 となります。

解法の考え方

アプローチは非常にシンプルです。リスト内の各要素 n に対して F(n) を順番に計算し、それぞれの F(n) と A の絶対差 |F(n) − A| を比較します。この絶対差が最小となる要素 n が求める答えになります。

C++による実装例

#include<iostream>
#include<cmath>
using namespace std;
int nearestValue(int P, int A, int N, int arr[]) {
   int ans = -1;
   float temp = (float)INFINITY;
   for (int i = 0; i < N; i++) {
      float term = P - arr[i] * 0.006;
      if (abs(term-A) < temp) {
         temp = abs(term - A);
         ans = i;
      }
   }  
   return arr[ans];
}
int main() {
   int P = 12, A = 5;
   int array[] = {1000, 2000, 1001};
   int N = sizeof(array)/sizeof(array[0]);
   cout << "Nearest value is: " << nearestValue(P, A, N, array) << endl;
}

実行結果

Nearest value is: 1001

上記のプログラムでは、リスト {1000, 2000, 1001} の中から F(n) が A = 5 に最も近くなる要素を探しています。F(1000) = 6、F(2000) = 0、F(1001) = 5.994 と計算できるため、A = 5 に最も近い 5.994 を持つ 1001 が出力されます。

このアルゴリズムの計算量は O(N) です。リストの要素数に比例した時間で処理が完了するため、実用的な範囲のデータサイズであれば十分に高速に動作します。

  1. 【C++】グラフ内の橋(ブリッジエッジ)の数を検出するプログラムの解説

    ブリッジエッジ(橋)とは? 重みなし無向グラフにおけるブリッジエッジ(橋)とは、その辺を取り除いたときにグラフが非連結(複数の連結成分に分断される)となるような辺のことです。本記事では、n個の頂点とm個の辺からなるグラフが与えられたとき、その中に含まれるブリッジの数を求めるC++プログラムを紹介します。なお、対象となるグラフには平行辺や自己ループは含まれないものとします。 問題の例 例として、n = 5、m = 6、edges = {{1, 2}, {1, 3}, {2, 3}, {2, 4}, {2, 5}, {3, 5}} という入力が与えられた場合を考えてみましょう。この場合の出力は

  2. C++で与えられた点から作成できる四角形の数を求める方法

    四角形とは? 四角形(クアドララテラル)とは、ユークリッド平面上で4つの頂点と4つの辺を持つ多角形のことを指します。「4-gon」という呼び方もあり、正方形や長方形なども四角形の一種に含まれます。 本記事では、与えられた点から作成できる四角形の数を求める手法について解説します。この問題では、直交座標系(XY平面)上に与えられた4つの点 (x, y) を用いて、いくつの四角形を構成できるかを求めます。まず、具体的な入力例と出力例を見てみましょう。 入力 : A( -2, 8 ), B( -2, 0 ), C( 6, -1 ), D( 0, 8 ) 出力 : 1 説明 : 作成できる四角形は1つだ