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



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

例如,如果用户输入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]);

先对数组进行排序。取三个临时变量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中有最接近的元素。注:请注意a[i+1]的数组越界,我刚刚给出了一个方法

我真的不想做你的作业,但我有点喜欢这个任务,所以这里至少是伪代码。自己用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

这是针对你的问题的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();
 }

最新更新