Tìm đoạn [a, b] chứa các giá trị phần tử của mảng

Yêu cầu:
– Cho mảng số thực
– Tìm [a, b] (a, b nguyên) sao cho các phần tử của mảng nằm trong đoạn [a, b]

Giải thuật:
– Tìm giá trị min, max của các phần tử trong mảng
– Làm tròn 2 giá trị min, max thành kiểu nguyên
Ví dụ:
– Mảng A = {1.56, -2.56, 0, -4,98, 12.7}
– min = -4, 98, max = 12.7
– a = floor(min) = -5, b = ceil(max) = 13

Code

/************************************************************
* Author: VNCODING
* History
* 2016/12/21        first create    VNCODING
*************************************************************/

#include <stdio.h>
#include <conio.h>
#include <math.h>

#define MAX_SIZE_ARR 100

void find_range_contain_arr(float*, int, int*, int*);

int main()
{
    float arr[MAX_SIZE_ARR], x, res;
    int n, i;
    int a, b;
    do
    {
        printf("n = ");
        scanf("%d", &n);
    }while(n <= 0 || n > 100);
    
    // Input array
    for(i = 0; i < n; i++)
    {
        printf("\narr[%d] = ", i);
        scanf("%f", &arr[i]);
    }
    find_range_contain_arr(arr, n, &a, &b);
    printf("[%d, %d] contains array", a, b);
    getch();
    return 0;
}

void find_range_contain_arr(float arr[], int sz, int* a, int* b)
{
    int i;
    float fa, fb;
    fa = fb = arr[0];
    for (int i = 1; i < sz; i++) { if(fa > arr[i])
        {
            fa = arr[i];
        }
        if (fb < arr[i])
        {
            fb = arr[i];
        }
    }
    // Ceil and floor
    *a = (int)floor(fa);
    *b = (int)ceil(fb);
}

Kết quả:

Tìm đoạn [a, b] chứa giá trị các phần tử trong mảng
Tìm đoạn [a, b] chứa giá trị các phần tử trong mảng

Be the first to comment

Leave a Reply