Допустим, у меня есть три вектора.
#include <vector>
vector<long> Alpha;
vector<long> Beta;
vector<long> Gamma;
И давайте предположим, что я заполнил их числами, и мы знаем, что они все одинаковой длины.(и мы знаем эту длину раньше времени - скажем, это 3.)
В конце я хочу получить минимум всех сумм Alpha[i] + Beta[j] + Gamma[k]
, таких как i
, j
иk
все неравны между собой.
Наивный подход будет выглядеть примерно так:
#include <climits>
long min = LONG_MAX;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
for (int k=0; k < 3; k++) {
if (i != j && i != k && j != k) {
long sum = Alpha[i] + Beta[j] + Gamma[k];
if (sum < min)
min = sum;
}
}
}
}
Честно говоря, этот код не выглядит правильным.Есть ли более быстрый и / или более элегантный способ - тот, который пропускает избыточные итерации?