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