псевдокод:
Number.toDigits().filter (sortedSet (Number.toDigits()). take (y))
Имхо вам не нужно знать х.
Для повышения эффективности Number.toDigits() может быть предварительно вычислены
digits = Number.toDigits()
digits.filter (sortedSet (digits).take (y))
В зависимости от языка и контекста, либо выход цифры и сделаны или должны снова конвертировать результат в число.
Рабочая Скала-код, например:
def toDigits (l: Long) : List [Long] = if (l < 10) l :: Nil else (toDigits (l /10)) :+ (l % 10)
val num = 734529L
val dig = toDigits (num)
dig.filter (_ > ((dig.sorted).take(2).last))
отсортированный набор набор, который отсортирован, что означает, каждый элемент содержится только один раз и затем полученная коллекция отсортирована по некоторым критериям, например, числовое восходящее. => 234579.
Мы берем два из них (23) и из этого подмножества последнего (3) и отфильтровываем число по критериям, чтобы цифры были больше этого значения (3).
В вашем вопросе явно не сказано, что каждая цифра содержится только один раз в исходном номере, но поскольку вы не дали критерия, который нужно устранить с сомнением, я воспринял его как неявное предположение.
Другие языки могут, конечно, иметь другие выражения (x.sorted, x.toSortedSet, new SortedSet (num), ...) или лишены определенных классов, функций, которые вам придется строить самостоятельно.
Возможно, вам потребуется написать собственный метод фильтрации, который берет педикат P и коллекцию C и возвращает новую коллекцию всех элементов, которые удовлетворяют P, P, являющемуся методом, который принимает один T и возвращает логическое значение. Очень полезный материал.
Где ваш процесс мышления сейчас? Попробуйте подумать _Какие xy цифры я сохраняю? _ (Или даже: как мне найти тот же вопрос в stackoverflow, если он написан по-разному? Глядя на столбец «Связанный» справа _might_ обманывайте.) – greybeard