Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm số từ danh sách đã cho mà giá trị của hàm gần nhất với A trong C ++

Giả sử chúng ta có một hàm F (n) sao cho F (n) =P - (0,006 * n), trong đó P cũng được cho trước. Cho một danh sách các số nguyên và một số A. Nhiệm vụ là tìm số từ danh sách đã cho, mà giá trị của hàm gần với A. Vì vậy, nếu P =12 và A =5, thì danh sách sẽ là {1000 , 2000} Vì vậy, sản lượng sẽ là 1000. Vì vậy, nếu P =12 và A =5, thì với 1000, F (1000) =12 - (0,006 * 1000) =6 và cho 2000, F (2000) =12 - (0,006 * 2000) =0, vì giá trị gần nhất với 5 là giá trị 6, vì vậy giá trị đó được lấy.

Lặp lại từng giá trị trong danh sách và tìm F (n) cho mọi giá trị. Bây giờ, hãy so sánh sự khác biệt tuyệt đối của mọi giá trị của F (n) và A và giá trị của n, mà sự khác biệt tuyệt đối là nhỏ nhất, sẽ là câu trả lời.

Ví dụ

#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;
}

Đầu ra

Nearest value is: 1001