2016-11-10 73 views
0

我有一個數組,我要求用戶輸入。 (我問陣列中的數字的數量,我問這些數字)。 我的問題是我如何比較所有的數字,並找到最接近的兩個?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]); 
+0

看起來像功課?! – dwo

+1

您已經完成了加載部分,但其餘的方法是什麼? – Poody

+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中有最接近的元素。 N.B.請注意爲[i + 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 
+0

注意:第一次使用時,abs(l-r)肯定會溢出。 – chux

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(); 
} 
相關問題