Как достичь общего числа, добавив число k в массив чисел arr []? - PullRequest
0 голосов
/ 04 января 2019

Я застрял с проблемой алгоритма с дней.Если у нас есть массив чисел, скажем, arr [2,4,9] и переменная k, допустим, k = 7.

Возможно ли общее число, которое может быть достигнуто путем добавления k ккаждый из элементов внутри arr []?

РЕДАКТИРОВАТЬ:


Когда я говорю общее число, я имею в виду число X = (n i k arr [i]) где n - положительное целое число, которое может быть разным для каждого i, k - предоставленное нам положительное целое число, arr - массив чисел.Таким образом, это в основном, чтобы найти n, для которого n i k arr [i] = общее число для всех i.


Я догадывался об использовании LCMКонцепция здесь, но не смог понять алгоритм все время.Свинец будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Супер просто.

    List<Integer> l = Arrays.asList(1, 6, 11);
    int k = 5;

    int min = l.stream().mapToInt(x -> x).min().getAsInt();
    boolean result = l.stream().mapToInt(x -> x)
            .map(x -> x - min)
            .allMatch(x -> x % k == 0);

    System.out.println("result = " + result);
0 голосов
/ 04 января 2019

Если вы можете добавить кратные значения k для каждого элемента, то каждый элемент массива может принимать значение вида

value := arr[i] + j * k

для некоторого целого значения j.Таким образом, они могут получить одно и то же значение, только если все элементы изначально кратны разности k друг от друга.

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

forall e in arr ->  e mod k == c; for some constant c
...