Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
12 / 12 / 5
Регистрация: 31.10.2015
Сообщений: 39

Алгоритм раскрытия диапазона в последовательность чисел с условием

20.11.2017, 17:02. Показов 1498. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны диапазоны натуральных чисел, вида [354-674], необходимо на выходе иметь последовательность чисел этого диапазона, причем если порядок входит в диапазон полностью, то его не указываем.

Пример, раскрытия для приведенного выше диапазона:
354,355,356,357,358,359,36,37,38,39,4,5, 60,61,62,63,64,65,66,670,671,672,673,674

Поясню подробнее:
после 359 идет 36, т.к все числа (360...369) входят в исходный диапазон.
тоже с 4 (400...499) попадают в исходный диапазон
т.к. исходный диапазон заканчивается на 674, то 67 мы поставить в полученную последовательность не можем, т.к., например 678 выходит за исходный диапазон.

Диапазоны представлены вплоть до 5-значных чисел.

Надеюсь, понятно описал.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2017, 17:02
Ответы с готовыми решениями:

Алгоритм случайных чисел с условием
Требуется создать простой алгоритм случайных чисел с условием того, что в последовательности этих чисел любые два, рядом стоящие...

Последовательность чисел из диапазона -80.FFh вводится с клавиатуры
Все привет, форумчане! Кто поможет написать программулину: Последовательность чисел из диапазона -80..FFh вводится с клавиатуры....

Задача на Цикл с условием: Дана последовательность ненулевых целых чисел,
Задача на Цикл с условием: Дана последовательность ненулевых целых чисел, оканчивающаяся нулем. Определить, сколько раз в этой...

9
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
23.11.2017, 01:29
Нужно на каждой итерации иметь значения Value и Power. Например для числа 4, из раскрытого вами диапазона, Value=4, Power=2.
Изначально Value = 354, Power = 1.
Далее в цикле:
1) Если число Value*(10^Power) не входит в диапазон - прекратить выполнение алгоритма.
2) Пока Value кратно 10 и числа Value * (10 ^ Power) и (Value + 1) * (10 ^ Power) - 1 входят в диапазон, делить Value на 10 и увеличивать Power на единицу.
3) Тут наоборот: пока число (Value + 1) * (10 ^ Power) - 1 не входит в диапазон, умножать Value на 10 и уменьшать Power
4) Число Value - следующее число раскрытого диапазона, надо его вывести его
5) Увеличить Value на 1.
1
12 / 12 / 5
Регистрация: 31.10.2015
Сообщений: 39
24.11.2017, 09:00  [ТС]
Спасибо за алгоритм!
Признаюсь честно, пока не могу вникнуть, но надо свободное время - посидеть, подумать.
Буду наглым уж до конца - случайно реализации на ЯП нет?
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
24.11.2017, 09:17
Цитата Сообщение от Pawka35 Посмотреть сообщение
случайно реализации на ЯП нет
А вы мне разверните диапазон [1-1024]
0
12 / 12 / 5
Регистрация: 31.10.2015
Сообщений: 39
24.11.2017, 09:34  [ТС]
[0001-1024]

0001-0002-0003-0004-0005-0006-0007-0008-0009-001-002-003-004-005-006-007-008-009-01-02-03-04-05-06-07-08-09-1000-1001-1002-1003-1004-1005-1006-1007-1008-1009-101-1020-1021-1022-1023-1024

Немного конкретизирую задачу - смысл в том, что человек как-бы набирает телефонный номер (это его часть), мы должны прописать правила так, чтобы не дать ему набрать комбинацию цифр, которая выходит за заданный диапазон. Т.е. там где мы переходим от 009 к 01 подразумевается что он может набрать 01x, и попадет в диапазон
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
24.11.2017, 09:54
Вы уверены что число 1000 надо выводить, а не 100, ведь числа 1000 - 1009 входят в диапазон?
1
12 / 12 / 5
Регистрация: 31.10.2015
Сообщений: 39
24.11.2017, 09:58  [ТС]
да, конечно вы правы, извиняюсь за невнимательность...утро

[0001-1024]

0001-0002-0003-0004-0005-0006-0007-0008-0009-001-002-003-004-005-006-007-008-009-01-02-03-04-05-06-07-08-09-100-101-1020-1021-1022-1023-1024
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
24.11.2017, 10:00
Надеюсь, сможете адаптировать код под свою IDE.
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
IEnumerable<string> Unwrap(int min, int max)
{
    if (max < min)
    {
        throw new ArgumentOutOfRangeException(nameof(min) + ", " + nameof(max));
    }
    if (min <= 0)
    {
        throw new ArgumentOutOfRangeException(nameof(min));
    }
    
    int length = (int)Math.Log10(max) + 1;
    return UnwrapImpl(min, max)
        .Select(valPow => valPow.Item1.ToString().PadLeft(length - valPow.Item2, '0'));
}
 
IEnumerable<Tuple<int, int>> UnwrapImpl(int min, int max)
{   
    int value = min;
    int multiplier = 1;
    while (true)
    {
        if (value * multiplier > max)
        {
            yield break;
        }
        while (value % 10 == 0 && (value + 1) * multiplier - 1 <= max)
        {
            value /= 10;
            multiplier *= 10;
        }
        while ((value + 1) * multiplier - 1 > max)
        {
            value *= 10;
            multiplier /= 10;
        }
        yield return Tuple.Create(value, (int)Math.Log10(multiplier));
        value += 1;
    }
}
 
void Main()
{
    Console.WriteLine("354,355,356,357,358,359,36,37,38,39,4,5,60,61,62,63,64,65,66,670,671,672,673,674");
    Console.WriteLine(string.Join(",", Unwrap(354, 674)));
    Console.WriteLine("0001-0002-0003-0004-0005-0006-0007-0008-0009-001-002-003-004-005-006-007-008-009-01-02-03-04-05-06-07-08-09-100-101-1020-1021-1022-1023-1024");
    Console.WriteLine(string.Join("-", Unwrap(1, 1024)));
}
1
12 / 12 / 5
Регистрация: 31.10.2015
Сообщений: 39
24.11.2017, 10:11  [ТС]
Огромное человеческое спасибо! В выходные все опробую! Как раз на C# и пишется.
Просьба скинуть в личку номер телефона, готов скромно отблагодарить "на тортик" в выходные
0
24.11.2017, 10:36

Не по теме:

Устной благодарности вполне достаточно

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2017, 10:36
Помогаю со студенческими работами здесь

Сгенерировать последовательность десяти случайных целых чисел из диапазона
Как сгенерировать последовательность десяти случайных целых чисел из диапазона и записать её в массив размером 1х10?

Эмпирическая формула. Алгоритм раскрытия скобок
Функция задана таблично. Составлена таблица разностей. Нужно построить эмпирическую формулу (явно выразить коэффициент при x^i i=0,n)....

Дана последовательность натуралных чисел a1,а2,аn. создать массив из четных чисел этой последовательность. если таких чисел нет то вывести сообщение о
Дана последовательность натуралных чисел a1,а2,аn. создать массив из четных чисел этой последовательность. если таких чисел нет то вывести...

Копирование диапазона ячеек с условием из выпадающего списка
Здравствуйте! Очень нужна Ваша помощь Пока не силен в EXCELe, но очень хочу больше узнать... а тут как раз поставили вроде простую...

Составить алгоритм и программу занесения в область памяти 2100H-2150H последовательность чисел от 0H до 50H
Задача такова: Составить алгоритм и программу занесения в область памяти 2100H-2150H последовательность чисел от 0H до 50H. Я написал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru