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ả:
Leave a Reply
You must be logged in to post a comment.