我有一个让用户输入的数组。(我问的是数组中的数字个数,我问的是这些数字)。我的问题是如何比较所有的数字并找到最接近的两个数字?
例如,如果用户输入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();
}