代码之家  ›  专栏  ›  技术社区  ›  Eugene

在数组中查找与c中平均值差最小的元素

  •  0
  • Eugene  · 技术社区  · 15 年前

    我需要设置数组的大小。之后,我开始输入数字来填充这个数组。在那个过程中,我计算和,以便以后计算平均值。

    现在我有了一个数组和平均值,我需要找到与平均值差异最小的元素。

    像:
    array size = 3
    input = 1
    input = 2
    input = 3

    average = 2

    计数

    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 回复  |  直到 15 年前
        1
  •  2
  •   pmg    15 年前

    您需要使用定义的两个变量来保存最低的差异和最低差异的索引,比如

        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);