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