2017-04-23 7 views
-1

私はCで、整数のリストを与えられた同じプログラムを持つ2対の整数のすべてを見つけるプログラムを書く必要があります。 2対は、X b = c X dおよびa≠b≠c≠dの2つの異なる整数対((a、b)、(c、d))である。リスト内の整数の範囲は1〜1024です。別個の製品のペア

私が書いたコードを表示しています。問題は、それらを明確にする方法がわからないことです。私は重複ペアをたくさん持っています。これは、より良いアルゴリズムに関連しています。ありがとう。

#include <stdio.h> 
#define NUM 10 

int main() { 

    int list[1024]; /* list1 is an array of 1024 integers */ 
    int multiplication[9999]; 
    int i,j,k,l,m=1,n=0,repeated=0; 

    /* filling list with integers from 1 to 1024*/ 
    for (i = 0; i < NUM; i++) { 
     list[i] = i+1; 
    } 


    for (i = 0; i < NUM/2; i++) { 

     for (j = 0; j < NUM; j++) { 

      for (k = 0; k < NUM; k++) { 

       for (l = 0; l < NUM; l++) { 

        if ((list[i]!= list[j] && list[i] != list[k] && list[i] != list[l] && list[j] != list[k] && list[j] != list[l] && list[k] != list[l]) && list[i] * list[j] == list[k] * list[l] && list[k] * list[l] != multiplication[m-1]){ 
         multiplication[m] = list[i]*list[j]; 
         m++; 

         for(n=0; n<m; n++){ 
          if(list[k] * list[l] == multiplication[n]){ 
           repeated = 1; 

          } 
          else repeated =0; 
         } 
         if (repeated == 1){ 
         printf ("%d*%d = %d*%d \n", list[i], list[j], list[k], list[l]); 
         } 


        } 
       } 
      } 
     } 
    } 
    for (i = 0; i < m; i++) { 
     printf ("%d\n", multiplication[i]); 
    } 


    return 0; 
} 
+0

最初にリストをソートし、重複を削除します。ここからのアルゴリズムは次のとおりです。リストからペア(a、b)を選びます。リストの残りの部分から非ゼロの 'c'を選びます。 'a * b%c'が0ならば、' d = a * b/c'を計算する。その値を検索します。見つかった場合は、要件を満たす2つの異なるペアがあります。すべての値のセットがチェックされるまで繰り返す。 'a * b'の計算がオーバーフローしないようにするには、' int'ではなく 'long'として計算します。 – Peter

答えて

0

私は次のようにこれらの番号を生成します信じる:

#define NUM 10 

int mainX() { 

    int i,j,k,l; 

    for (i = 1; i <= NUM/2; i++) { 

     for (j = i; j <= NUM; j++) { 

      for (k = i+1; k <= NUM; k++) { 

       for (l = k; l <= NUM; l++) { 

        if (i*j == k*l && i!=k && i!=l && j!=k && j!=l) 
         printf ("%d * %d = %d * %d\n", i,j,k,l); 
       } 
      } 
     } 
    } 
    return 0; 
} 

出力:

1 * 4 = 2 * 2 
1 * 6 = 2 * 3 
1 * 8 = 2 * 4 
1 * 9 = 3 * 3 
1 * 10 = 2 * 5 
2 * 6 = 3 * 4 
2 * 8 = 4 * 4 
2 * 9 = 3 * 6 
2 * 10 = 4 * 5 
3 * 8 = 4 * 6 
3 * 10 = 5 * 6 
4 * 9 = 6 * 6 
4 * 10 = 5 * 8 
+0

ありがとう!!私は0からすべてのループを開始していた!ありがとうございました! –

関連する問題