Я пытаюсь создать функцию, которая в списке массивов будет сравнивать каждый массив с каждым массивом, который идет после него: массив 0 будет сравнивать себя с массивами 1, 2, 3, 4 и т. Д., Массив 1 будет сравнивать себя с массивами 2, 3, 4 и так далее, но не с 0, как мы уже сравнивали. То же самое и в остальном: массив 2 будет сравнивать себя с 3, 4 и т. Д.
Обычно это можно сделать с помощью простого вложенного для l oop:
for (int i = 0; i <= number_of_arrays - 1; i++){
for (int j = i+1; j<= number_of_arrays; j++){
printf("Comparing Array %d with Array %d", i, j);
}
}
Однако, поскольку я использую OpenMP, я не могу использовать #pragma omp for
внутри другого. В решении обычно также используется collapse(2)
, но я также не могу использовать, поскольку счетчик моего внутреннего l oop зависит от счетчика моего внешнего.
Чтобы не было эта проблема, я должен превратить это в один for
l oop, общее решение этого, похоже:
for (int i = 0; i <= (number_of_arrays - 1)*number_of_arrays; i++){
printf("Comparing Array %d with Array %d", i/number_of_arrays, i%number_of_arrays);
}
}
Это, однако, вызовет избыточность моего кода, поскольку я буду , например, сравните массив 0 с массивом 1, а затем массив 1 с массивом 0. Как я могу превратить то, что у меня есть, в один for
l oop, который не будет выполнять избыточных сравнений?