Tìm đoạn [-x, x] chứa toàn bộ phần tử trong mảng

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

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
– Tìm giá trị max của 2 số sau khi làm tròn
Ví dụ:
– Mảng A = {1.56, -2.56, 0, -4.98, 2.7}
– min = -4.98, max = 2.7
– floor(min) = -5, ceil(max) = 3
– x = 5 vì abs(-5) > abs(3)

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 main()
{
    float arr[MAX_SIZE_ARR];
    int n, i;
    int x;
    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, &x);
    printf("[%d, %d] contains array", -1*x, x);
    getch();
    return 0;
}

void find_range_contain_arr(float arr[], int sz, int* x)
{
    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 
    *x = abs(floor(fa)) > abs(ceil(fb))? (int)abs(floor(fa)) : (int)abs(ceil(fb));
}

Kết quả:

Tìm đoạn [-x, x] chứa các phần tử của mảng
Tìm đoạn [-x, x] chứa các phần tử của mảng

Be the first to comment

Leave a Reply