【问题标题】:Find element in array with lowest difference from average in C在数组中查找与 C 中的平均值差异最小的元素
【发布时间】:2010-11-09 16:02:38
【问题描述】:

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

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

点赞:
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;

}

更新:我很抱歉。问题是如何在不让这个简单的程序变得更复杂的情况下完成最后一部分。

谢谢大家的帮助。

【问题讨论】:

    标签: c arrays average


    【解决方案1】:

    您需要使用定义的 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);
    

    【讨论】:

    • 但我需要找到最小的差异,而不是最小值。比如:for( i = 0; i &lt; n; i++ ) { tmp = abs( ( double )( a[ i ] ) - average ); b[ i ] = tmp; }
    • @Eugene:当你进入这个循环时,b 数组已经包含了差异。只需遍历数组检查值(这是差异!)是否是迄今为止最低的并更新变量。
    猜你喜欢
    • 1970-01-01
    • 2021-06-18
    • 2014-03-31
    • 2016-11-17
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    相关资源
    最近更新 更多