我必须在C中编写一个程序,给定一个整数列表,找到所有具有相同产品的2对整数。 2对是2对不同的整数((a,b),(c,d)),其中X b = c X d且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 :(得分: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