首页 > 解决方案 > 关于从数组中的每个元素生成有序对的问题

问题描述

我很好奇我怎么可能遍历一个数组,并跟踪每一个可能的有序对

创造一个问题来说明这一点;假设我有一个函数,它接收一个输入数组、该数组的长度和一个“目标”,它是 2 个值的乘积,并输出一个数组,该数组由您需要按顺序相乘的输入数组的索引组成获得“目标”。

int* multipairs(int* inputarray, int arraysize, int target){
       /code
}

例如:

给定一个数组arr = [2, 5, 1, 9, 1, 0, 10, 2], 和target = 50

它应该返回output = [1,6]

在我看来,我将遍历数组如下; (0,1) -> (0,2) -> (0,3) -> (0,4)....

在第二遍中,我会这样做:

(1,2) -> (1,3) -> (1,4)...
.
.
.

等等

我有我想做什么的想法,但我不熟悉 C 编程,也不知道如何制作合适的 for 循环。请帮我解决这个问题。

标签: arrayscfor-loopnested-loops

解决方案


您可以使用嵌套的 for 循环来解决您的问题。

int* multipairs(int* inputarray, int arraysize, int target){
    int i, j, k = -1;
    /*
    Maximum number of such pairs can be arraysize*(arraysize-1)/2
    Since, for each pair we store two indices (0-indexed),
    maximum size of output array will be arraysize*(arraysize-1)
    */
    int maxsize = arraysize*(arraysize-1); 
    int *output = (int*)malloc(sizeof(int)*maxsize);
    for (i = 0, i < arraysize; i++){
        for (j = i + 1; j < arraysize; j++){
            if(inputarray[i] * inputarray[j] == target){
                output[++k] = i;
                output[++k] = j;
            }
        }
    }
    return output;
}

推荐阅读