Найти элемент в массиве с наименьшим отличием от среднего в C - PullRequest
0 голосов
/ 09 ноября 2010

Мне нужно установить размер массива. После этого я начинаю вводить цифры для этого массива. Во время этой процедуры я считаю сумму для вычисления среднего значения позже.

Теперь у меня есть массив и среднее, и мне нужно найти элемент с наименьшим отличием от среднего.

как:
array size = 3
input = 1
input = 2
input = 3

average = 2

Counting

abs( 1 - 2 ) = 1
abs( 2 - 2 ) = 0
abs( 3 - 2 ) = 1

Таким образом, наименьшая разница имеет элемент со значением 2. И в конце программы мне нужно вывести этот элемент из массива и его индекс.

Пока я придумал:

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char **argv )
{

    int n = 0, i = 0;

    double average = 0;
    int sum = 0;
    double tmp = 0;

    double min = 0;
    int index = 0;

    int *a;
    double *b;

    printf("Amount of elements = ");
    scanf("%d", &n);

    if( 0 == n )
    {
        return 0;
    }

    if( n < 1 || n > 10 )
    {
        return 0;
    }

    a = ( int* )malloc( sizeof( *a ) * n );
    b = ( double* )malloc( sizeof( *b ) * n );

    while( i < n )
    {
        printf("Input number: ");
        scanf("%d", &a[i]);
        sum += a[i];
        i++;
    }

    average = ( double )( sum / n );

    printf("Average = %.3lf\n", average);

    for( i = 0; i < n; i++ )
    {
        tmp = abs( ( double )( a[ i ] ) - average );
        b[ i ] = tmp;
    }

    /* for( i = 0; i < n; i++ )
    {

    } */

    free( a );
    free( b );

    return 0;

}

Обновление: Мои извинения. Вопрос в том, как выполнить последнюю часть, не делая эту простую программу еще более сложной.

Спасибо всем за помощь.

1 Ответ

2 голосов
/ 09 ноября 2010

Вам нужно использовать 2 переменные, определенные для хранения самой низкой разницы и индекса самой низкой разницы в чем-то вроде

    min = b[0]; /* initialize min with b[0] */
    index = 0;  /* and index with 0 */
    for( i = 1; i < n; i++ ) /* loop from 1 onwards ... index 0 was used for initialization */
    {

        /* maybe change min to b[i] */
        /* and index to i */

    }

    free(a);
    free(b);
...