Я надеюсь, что это не обман, но сложно свести проблему к ключевым словам!
Это всегда то, о чем я задавался вопросом. Допустим, у вас есть черный ящик, который принимает на вход n целых чисел (где n > 1). Учитывая, что существуют ограничения на целочисленные значения, как бы вы написали алгоритм, который будет проталкивать все пространство выборки через черный ящик? (бонусные баллы, если n можно указать во время выполнения)
Моя попытка, когда n = 2, выглядит следующим образом:
int min = 0;
int max = 9;
int a = min;
int b = min;
while(a <= max && b <= max)
{
blackBox(a, b);
a++;
if(a > max)
{
a = min;
b++;
}
}
Приведенный выше код подходит для двух переменных, но, как вы могли догадаться, мой алгоритм становится действительно уродливым, когда n приближается к двузначному числу.
Есть ли лучший способ сделать это, кроме вложенных операторов if, как я сделал?
Я знаю плохой способ сделать это, который состоит в том, чтобы случайным образом генерировать значения для каждой итерации и сохранять входные данные предыдущих итераций, чтобы вам не тыкать в черный ящик одними и теми же переменными дважды. Однако я надеялся на более быстрый метод, так как коллизии действительно сокращают время выполнения, поскольку количество уникальных вызовов черного ящика приближается к (max - min + 1) ^ n