c - 不同的产品对

标签 c

我必须用 C 语言编写一个程序,给定一个整数列表,找到具有相同乘积的所有 2 对整数。 2 对是 2 个不同的整数对 ((a,b),(c,d)),其中 a 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;
}

最佳答案

我相信以下内容会生成这些数字:

#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

关于c - 不同的产品对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43569690/

相关文章:

c - 更优雅的解析方式

转换文件时间以在计时器中使用

c - 这可能是由于堆损坏,这表明 cvector.exe 或它加载的任何 DLL 中存在错误

java - 获取 jstring/char * 的长度?

c - 什么时候用箭头,什么时候用点?

c - 为什么这个快速排序实现给出正确的输出而不是垃圾值?

c - 为什么这段代码会出错?

Clion 和 OpenMP

linux - 如何在 Linux 上的 C 中查找未初始化的变量?

C 中的 Python struct.unpack 等价物