如何在数组中找到两个最接近的整数和数字之间的差异

时间:2015-03-30 20:56:43

标签: c arrays

我的代码的目标是在数组中的数字和整数之间得到两个最接近的差异。这是我的代码。

#include <stdio.h>
int main()
{
int kilometre, exit_gas[7]={90,95,116,150,300,377,677},i,distance;
distance=(kilometre-exit_gas[0]);
printf("Enter your kilometre reading:");
scanf("%d",&kilometre);
for(j=1;j<8;++j){
    if(abs(kilometre-exit_gas[j])<distance){
        distance=abs(kilometre-exit_gas[j]);
        printf("%d\n",distance);
    }
}
return 0;
}

我的代码问题是它找到了数组中所有数字和整数(公里)之间的差异。例如,如果公里为299,则上述代码的输出为:

204
183
149
1

所需的输出应为:

149
1

我知道我收到204 183因为他们也满足限制if(abs(kilometre-exit_gas[j])<distance)所以我应该如何修改限制以获得所需的结果?

1 个答案:

答案 0 :(得分:1)

我还不明白你如何得到你帖子中显示的结果,因为我得到了另一个结果。不过,该计划可以采用以下方式:

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

int main(void) 
{
    int exit_gas[] = { 90, 95, 116, 150, 300, 377, 677 };
    const size_t N = sizeof( exit_gas ) / sizeof( *exit_gas );
    size_t i;
    int kilometre;
    unsigned int first, second;

    printf( "Enter your kilometre reading: " );
    scanf( "%d", &kilometre );

    for ( i = 0; i < N; i++ )
    {
        unsigned int distance = abs( kilometre - exit_gas[i] );
        if ( i == 0 || distance < first )
        {
            if ( i != 0 ) second = first;
            first = distance;
        }
        else if ( i == 1 || distance < second )
        {
            second = distance;
        }
    }

    printf( "%u\n", first );
    printf( "%u\n", second );

    return 0;
}

我的程序输出

1
78