powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нужен алгоритм. Конвертация диапазона чисел в шаблон с переменными
8 сообщений из 8, страница 1 из 1
Нужен алгоритм. Конвертация диапазона чисел в шаблон с переменными
    #37442172
Дано 2 целых числа.

Число А - начальное
Число Б - конечное
Число А < или = Б

Количество символов в числе А = количеству символов в числе Б. Даже если А=0
(пример: число А=00, число Б=99; или А=001, Б=056 - это всё часть результата).

Данный диапазон - непрерывен. Циклически прибавляя +1, мы достигнем число Б, начиная с числа А (если только А!=Б). Тогда и прибавлять нечего. И результат - 1 строка.

Задача: расписать данный диапазон от А до Б с минимальным количеством строк, подставляя переменную X, которая может быть равна любому значению от 0 до 9, в качестве любой цифры/символа из данного диапазона.

Примеры.

Дано. А=000, Б=021
Результат (4 строки):
00X
01X
020
021

Дано. А=019. Б=301
Результат (11 строк):
019
02Х
03Х
04Х
05Х
06Х
07Х
08Х
09Х
2ХХ
301

Возможен ли универсальный алгоритм по данную задачу?

Заранее спасибо. Любые советы будут полезны.
...
Рейтинг: 0 / 0
Нужен алгоритм. Конвертация диапазона чисел в шаблон с переменными
    #37442464
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычный алгоритм двунаправленного укрупнения диапазонов.
Посмотрите стандартную задачу представления диапазона IP-адресов в виде минимального набора подсетей.
...
Рейтинг: 0 / 0
Нужен алгоритм. Конвертация диапазона чисел в шаблон с переменными
    #37442493
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непрограммист,

В программировании нельзя отличить числа 0036 и 36. Стало быть, мы имеем дело со строками, судя по примерам (к слову, второй пример решён неверно).
Далее. У нас есть строковые записи А и Б, равной длины и состоящие из символов 0-9. Описание "диапазона" несложно получить следующим образом (до этого вполне можно было бы додуматься, расписав руками ещё пару-тройку примеров):
Пусть А и Б начинают (считая слева) различаться в некоторой цифре. Очевидно, что все цифры левее тупо повторятся во всех записях, так что будем считать, не ограничивая общности, что они различаются в первой слева цифре либо равны; второй случай тривиален.
Если первая цифра А - а1, а Б - б1, то промежуток содержит все числа, начинающиеся с цифр между а1 и б1 (будем рассматривать А=0350, Б=3300. Тогда промежуток включает 1ХХХ и 2ХХХ).
Выписали ли мы весь промежуток? Разумеется, нет - он пока не включает ни А, ни Б. Начнём расширять его в сторону А: остаток промежутка начинается с а1; если вторая цифра А - а2, то в него попадает всё, у чего вторая цифра больше а2 (в нашем примере, в промежуток добавились 04ХХ, 05ХХ, 06ХХ, 07ХХ, 08ХХ и 09ХХ). Неохваченный остаток промежутка со стороны А теперь начинается с а1,а2 и мы можем перейти к следующей цифре (036Х, 037Х, 038Х, 039Х). И так далее, пока не кончится число (в нашем случае, остался один шаг - 0351, 0352, 0353, 0354, 0355, 0356, 0357, 0358, 0359). Наконец, дополним его самим А (0350) и половина списка готова.
Аналогично можно поступить со стороны Б, только на сей раз нас будут интересовать цифры меньше бi (30ХХ, 31ХХ, 32ХХ, 3300). Как видим, в случае цифр 9 в А или 0 в Б соответствующий шаг надо пропускать.
Легко видеть, что последние десять элементов, дописанные со стороны А, можно было бы объединить в один. Как это можно сделать? Например, с помощью предварительной подготовки строк. После того, как мы определили первую различающуюся цифру, можно идя от правого края, заменять в А 0, а в Б 9 на Х (в нашем примере, такая подготовка даст А=035Х, Б=3300). Можно вместо этого поставить в А запись числа на 1 меньше, а в Б - на 1 больше и не включать края (проведите самостоятельно описанный вначале алгоритм для строк 0349, 3301).
Всегда ли мы будем получать таким образом минимальное количество строк? Увы, нет: для А=01, Б=98 такой метод даст 26 строк, в то время как можно обойтись шестнадцатью (подумайте, как).

Шагнём с противоположного конца: вот у нас есть строка, в которой на некоторой позиции стоит Х. Что это значит? Что при любой цифре на месте Х мы не выйдем за пределы диапазона от А до Б. Возьмём две любые цифры - 0 и 9. До тех пор, пока, идя слева направо, мы не натолкнулись на "вилку" аi=0, бi=9, мы можем пользоваться вышеописанным алгоритмом: никакое "конкурирующее" покрытие не сможет охватить одной строкой пару чисел, относящихся к разным нашим строкам. А вот 0-9, это и впрямь "вилка": можно попытаться подставить здесь Х, а можно поступить вышеописанным образом. В принципе, при недлинных строках можно рассчитывать оба варианта и смотреть, какой получился лучше.

Дальше пока не придумал
...
Рейтинг: 0 / 0
Нужен алгоритм. Конвертация диапазона чисел в шаблон с переменными
    #37442496
Да, во втором примере я забыл про строку "300".
Щас попытаюсь переварить вами сказанное.
...
Рейтинг: 0 / 0
Нужен алгоритм. Конвертация диапазона чисел в шаблон с переменными
    #37442499
А, да, и вторую сотню в корне неправильно указал (2ХХ, а 1 уже надо было расписать). Да, виноват. На скорую руку примеры писал. Извините.
...
Рейтинг: 0 / 0
Нужен алгоритм. Конвертация диапазона чисел в шаблон с переменными
    #37442901
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionВ программировании нельзя отличить числа 0036 и 36. Стало быть, мы имеем дело со строками, судя по примерамВообще-то из описания совершенно ясно, что требуется шаблонизация строкового представления чисел, выполненного в заданном формате.
...
Рейтинг: 0 / 0
Нужен алгоритм. Конвертация диапазона чисел в шаблон с переменными
    #37442987
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Да, я понимаю. Хотелось отдельно обратить внимание, что на вход программе приходят строки, а не двоичные представления чисел.
...
Рейтинг: 0 / 0
Нужен алгоритм. Конвертация диапазона чисел в шаблон с переменными
    #37444478
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какая разница? впрочем, обеспечение корректности параметров выходит за рамки проставленной задачи.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нужен алгоритм. Конвертация диапазона чисел в шаблон с переменными
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]