2016-11-10 9 views
0

私はユーザに入力を求めた配列を持っています。 (私は配列内の数字の数を尋ねたので、その数字を聞いた)。 私の質問は、どのようにすべての数字を比較し、2つの最も近い数字を見つけるのですか?C - 配列に2つの最も近いint値を取得する

たとえば、ユーザーが3,5,8,9のような4つの数字を入力した場合、プログラムでは8と9が最も近いものと見なされます。 その後、私はちょうど2つの最も近い数字を減算する必要があります。

これは、これまでの私のコードです:

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

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

宿題のように見えますか? – dwo

+1

ローディング部分がソートされていますが、残りの部分はどのようなアプローチですか? – Poody

+0

「最も近い」数字を見つける1つの方法は、数字を減算することで、最も小さな差を持つ2つは、あなたが望むペアです。ちなみに、これもあなたの2番目の問題を解決します。 –

答えて

0

は、最初の配列をソートします。 3つの温度変数n1 = 0、n2 = 0、diff = 0を取ります。 ソートされた配列を反復すると、a []、a [i + 1]にn1、n2を代入します。ここで、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

はあなたにターボ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(); 
} 
関連する問題