Здраствуте уважаемые юзеры!
Недавно прочитав разбор задачи 131 раунда(div 2) — B.Домашняя задача.
Пришло мысл про то:
- А что если будет задачи типа.
Дается чило N (кол-во цифр в N 10^5) и X.
Далее можно делать эти операций:
1) Менять местами некоторые цифры
2) Удалять некоторые цифры
Нужно вывести максимальное число N которое прошёл через выше описанные операций и делится на число X.
Недавно копался в Wiki и нашёл эту статью.
Придумал решение на некоторые случаи:
Если X = 2: Число делится на 2 тогда и только тогда, когда его последняя цифра делится на 2, то есть является чётной. Решение: Можно понять посмотрев на код. Div_to_2.cpp
Если X = 3: Число делится на 3 тогда и только тогда, когда сумма его цифр делится на 3. Решение: Возьмем все цифры в невозрастающем порядке, если сумма цифр кратна 3, то это и есть ответ. Если остаток от деления вышел 1, то нужно убрать 1 цифру у которой остаток от деления на 3 равен 1. Если такой не нашли то нужно убрать 2 цифры с остатком 2. Аналогично рассматривается случай когда изначальный остаток равен 2. Так-же нужно рассмотреть случай когда остались только нули, в этом случае нужно вывести только 1 ноль. Div_to_3.cpp
Если X = 4: Число делится на 4 тогда и только тогда, когда две его последние цифры составляют число, которое делится на 4. Решение: Можно понять посмотрев на код. Div_to_4.cpp
Если X = 5: Число делится на 5 тогда и только тогда, когда последняя цифра делится на 5, т. е. если она 0 или 5. Решение: Можно понять посмотрев на код. Div_to_5.cpp
Если X = 6: Число делится на 6 тогда и только тогда, когда оно делится и на 2, и на 3 (то есть первым делом получаем максимальное число которое делится на[мы уже это умеем]. Далее получаем число которое делится на 2[мы это тоже умеем]). Решение: Можно понять посмотрев на код. Div_to_6.cpp
Напишите пожалуйста разбор на более сложные случаи 7,8,11,13,14,17.