Я хочу получить четкий список значений для трех переменных, которые складываются до 1 с шагом 0,05 - PullRequest
0 голосов
/ 22 февраля 2020

Я хочу найти отдельный список десятичных дробей, которые добавляются к 1, учитывая, что я использую три переменные, и каждая переменная может увеличиться на 0,05.

Таблица значений будет выглядеть примерно так:

Var1   Var2   Var3   Total
 0.0    0.05   0.95   1
 0.20   0.40   0.40   1
 0.15   0.75   0.10   1
 0.50   0.25   0.25   1
 0.80   0.20   0.00   1

И так далее ... Я думаю, вы поняли идею.

1 Ответ

0 голосов
/ 22 февраля 2020

Первое, что нужно понять, это то, что, поскольку все они равны 1, var3 является функцией var2 + var1. Таким образом, у вас действительно есть две переменные здесь.

Вы можете грубо форсировать это, просто зацикливая var1 и var2 вслепую и сохраняя значения:

List<int[]> sets = new ArrayList<>();

for(int var1 = 0; var1 <= 100; var1 += 5) {
    for(int var2 = 0; var2 <= 100; var2 += 5) {
        int var3 = 100 - (var1 + var2);
        if(var1 + var2 + var3 == 100 && (var1 != var2) && (var1 != var3) && (var2 != var3)) {
             int[] set = new int[] { var1, var2, var3 };
             sets.add(set);
        }
    }
}

Теперь это пронизано неэффективностью что, надеюсь, вы сможете определить и оптимизировать, но это должен быть эффективный способ сделать это. Обратите внимание, что я использовал целые числа, поэтому у нас не было странных ошибок округления с плавающей запятой. Измените ваш вывод соответственно.

...