首页 > 解决方案 > 从数组中查找最接近数字的函数始终返回数组的第一个元素

问题描述

在我的程序中。我需要编写一个函数并输入一个目标数字。该函数必须遍历元素数组并找到最接近目标数字的数字。我设法在这里找到了示例函数: https ://www.tutorialspoint.com/find-closest-number-in-array-in-cplusplus

我所做的只是将数组更改为

int arr[] = { 2970, 2950, 2930, 2910, 2880, 2860, 2840 };

完整代码:

static int getNearest(int x, int y, int target) {
   if (target - x >= y - target)
      return y;
   else
      return x;
}

static int getNearestElement(int arr[], int n, int target) {
   if (target <= arr[0]){
      return arr[0];
   }

   if (target >= arr[n - 1]){
      return arr[n - 1];
   }

   int left = 0, right = n, mid = 0;
   while (left < right) {
      mid = (left + right) / 2;
      if (arr[mid] == target){
         return arr[mid];
      }
      if (target < arr[mid]) {
         if (mid > 0 && target > arr[mid - 1]){
            return getNearest(arr[mid - 1], arr[mid], target);
         }
            right = mid;
      }
       else {
         if (mid < n - 1 && target < arr[mid + 1]){
            return getNearest(arr[mid], arr[mid + 1], target);
         }
         left = mid + 1;
      }
   }
   return arr[mid];
}



int get_temperature(int target){


        int arr[] = { 2970, 2950, 2930, 2910, 2880, 2860, 2840 };
        int n = sizeof(arr) / sizeof(arr[0]);
        return (getNearestElement(arr, n, target));



}

在我的 main.c 中,我调用:

    int closest_temperature = get_temperature(2900);
    printf("closest temperature = %i\n",closest_temperature);

输出是:

closest temperature = 2970

即使最接近的数字是 2910,它似乎总是返回我的数组的第一个元素。有人可以帮我发现错误吗?

标签: arraysc

解决方案


推荐阅读