C - 在数组中获取两个最接近的int数

时间:2016-11-10 12:30:16

标签: c arrays

我有一个数组,我要求用户输入。 (我问了数组中的数字,我问了这些数字)。 我的问题是如何比较所有数字并找到最接近的数字?

所以,例如,如果用户输入4个数字,如:3,5,8,9。程序应该看到8和9是最接近的? 之后我只需要减去两个最接近的数字。

到目前为止,这是我的代码:

    int main()
{
    int N;
    int c;
    scanf("%d", &N);

    for (c = 0; c < N; c++)
    scanf("%d", &array[c]);

3 个答案:

答案 0 :(得分:0)

首先对数组进行排序。 取3个临时变量n1 = 0,n2 = 0,diff = 0。 迭代排序的数组将n1,n2分配给a [i],a [i + 1],其中a []是数组,i是迭代器。

If     absolute(a[i]-a[i+1]) < diff     then 
diff =  absolute(a[i]-a[i+1]);
n1 = a[i]; 
n2 = a[i+1];

当迭代完成时,你在n1和n2中有最接近的元素。 注:请关注一个[i + 1]的数组,我刚刚给出了一个方法。

答案 1 :(得分:0)

我真的不想做你的作业,但我有点喜欢这个任务,所以这里至少是伪代码..自己重写给C

proc findclosest(array)
    int l = int.max, r = int.min, len = array.count
    for i from 0 to len do
        for j from i + 1 to len do
            if abs(array[i] - array[j]) < abs(l - r) then
                l = i
                r = j
            end if
        end for
    end for
end proc

答案 2 :(得分:0)

以下是您问题的Turbo C程序。 ..并且工作得很好。 ..

#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
 int a[30],i,j,n,l=0,m=1;
 clrscr();
 printf("Enter no. of elements :");
 scanf("%d",&n);
 printf("Enter array elements:");
 for(i=0;i<n;i++)
 {
 scanf("%d",&a[i]);
}
 for(i=0;i<n-1;i++)
 {
 for(j=i;j<n-1;j++)
 {
 if(abs(a[j]-a[j+1])<abs(a[l]-a[m]))
 {
   l=j;
   m=j+1;
 }
 }
 }
  printf("Closest numbers are %d and %d",a[l],a[m]);
 getch();
 }