Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
1104 / 480 / 33
Регистрация: 05.07.2018
Сообщений: 1,870
Записей в блоге: 7

Решение задачи иначе (другим алгоритмом)?

04.09.2018, 09:10. Показов 1243. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача
1. дано пятизначное число 56511
2. требуется найти пятизначное число большее заданного и удовлетворяющего условию
3. новое число должно состоять из тех же самых цифр, что и исходное число
4. новое число должно быть первым из подобных чисел (наименьшим, самым близким)

Решение
1. одно из решений прилагается
1.1 использовано свойство, что числа делятся на 9

2. другое решение можно получить если задать пятикратный цикл
2.1 поместить все числа в массив и отсортировать их по величине
2.2 но это ... это видимо не самое лучшее решение

3. вероятно рекурсивное решение будет коротким. Но к нему даже не подступишься.
4. скорее всего есть и иные решения, мне неизвестные (можно задать троичную систему счисления?)

QBasic/QuickBASIC
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
REM 56511 => 61155
 
DECLARE FUNCTION f! (x!, y!)
CLS
 
CONST p = " "
CONST A = 56511
 
FOR i = A + 9 TO 65511 STEP 9
   IF f(A, i) THEN PRINT i: EXIT FOR
NEXT
END
 
FUNCTION f (x, y)
   DIM x1 AS STRING
   DIM y1 AS STRING
   DIM s1 AS STRING
 
   
   x1 = LTRIM$(STR$(x))
   y1 = LTRIM$(STR$(y))
 
   FOR i = 1 TO LEN(x1)
      s1 = MID$(x1, i, 1)
      k = INSTR(y1, s1)
 
      IF k THEN
         MID$(y1, k, 1) = p
      ELSE
         EXIT FUNCTION
      END IF
   NEXT
 
   f = -1
END FUNCTION
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.09.2018, 09:10
Ответы с готовыми решениями:

Разобраться с алгоритмом задачи
Помогите разобраться с алгоритмом, как работает программа. Я понимаю что здесь 38 перестановок. Но мне нужно знать как именно работает эта...

Проблемы с алгоритмом решения задачи
Нужно написать алгоритм решения задачи. Т.е. что и как делает прога, желательно построчно, ну или близко к этому. Собственно задача: ...

Реализация задачи линейным алгоритмом
Задание такое: Сколько четырехзначных нечетных чисел можно образовать, используя цифры: 0,1,4,5,6,8? Выписать наименьшее и наибольшее из...

6
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
04.09.2018, 12:56
Разумеется, Ваше решение не оптимально. Чтобы найти искомое число, надо перебрать 4644 числа. На мой взгляд, проще всего решает задачу троичная система, с помощью которой решение находится уже на двадцатом шаге, а учитывая, что цифра 6 в числе только одна, решение можно сократить до 6 итераций:
12100
12101
12110
12111
20000
20001
20011 решение найдено

Добавлено через 10 минут
20010 пропустил
0
1104 / 480 / 33
Регистрация: 05.07.2018
Сообщений: 1,870
Записей в блоге: 7
04.09.2018, 13:51  [ТС]
Уважаемый кот Бегемот,
вы меня извините, но я что-то не понял ваше решение. Там у вас есть
к примеру число 20000 ... Ну тут вообще две цифры. А цифр должно быть
три, из которых две повторяются два раза.
Вы меня еще раз извините, но как я из этого числа получу новое число?
Ведь будет что-то 65555 (либо 61111). Может я что-то не так понимаю?
...
примечание
В коде должна быть проверка? (скорее всего?)
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
04.09.2018, 13:58
Впрочем, программирования здесь вообще не надо. Задача легко решается а уме. Проанализировав исходное число, приходим к однозначному выводу: чисел, начинающихся на 5, больших исходного числа и состоящих из тех же цифр быть не может (56511 - наибольшее число, начинающееся на 5). Следовательно, нам нужно минимальное число, начинающееся с 6. Строим его по возрастанию цифр: 61155

Добавлено через 2 минуты
PS только что увидел ваше сообщение. В числе должны быть цифры 1,1,5,5,6. Если заменить их на троичные, то это будет 0,0,1,1,2
0
1104 / 480 / 33
Регистрация: 05.07.2018
Сообщений: 1,870
Записей в блоге: 7
04.09.2018, 14:31  [ТС]
Уважаемый кот Бегемот,
я тоже понимаю, что эту задачу можно решить чуть ли не в уме.
Но нужна именно программа, которая решит эту задачу и выдаст
ответ.
Эта задача и дается на развитие интеллекта и поиска разнообразных
алгоритмов ее решения. Если бы не это... ну вы читали ... задачу я
решил ... а вот еще новый алгоритм никак (что я писал - это лишь предположения)

Добавлено через 26 минут
...
Мне кажется, что все подходящие числа можно получить из одного
11556 путем перестановки цифр. Но как их получить? Пятикратный
цикл - это сложно.
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
04.09.2018, 14:53
Лучший ответ Сообщение было отмечено нтч как решение

Решение

Цитата Сообщение от нтч Посмотреть сообщение
скорее всего есть и иные решения, мне неизвестные
берем массив из 5 чисел
получаем следующую перестановку в лексикографическом порядке (например алгоритмом Нарайаны)
QBasic/QuickBASIC
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
DECLARE FUNCTION NextPerm% (a() AS INTEGER, n AS INTEGER)
CONST m = 5
DIM a(1 TO m) AS INTEGER, i AS INTEGER, j AS INTEGER
FOR i = 1 TO m
    READ a(i)
    PRINT a(i);
NEXT i
PRINT
j = NextPerm(a(), m)
FOR i = 1 TO m
    PRINT a(i);
NEXT i
PRINT
DATA 5, 6, 5, 1, 1
 
FUNCTION NextPerm% (a() AS INTEGER, n AS INTEGER)
    DIM i AS INTEGER, k AS INTEGER, t AS INTEGER
    FOR k = n - 1 TO 1 STEP -1
        IF a(k) < a(k + 1) THEN EXIT FOR
    NEXT k
    IF k THEN
        FOR i = n TO k + 1 STEP -1
            IF a(k) < a(i) THEN SWAP a(k), a(i): EXIT FOR
        NEXT i
    END IF
    t = n
    FOR i = k + 1 TO (n + k) \ 2
        SWAP a(i), a(t)
        t = t - 1
    NEXT i
    NextPerm = k
END FUNCTION
1
1104 / 480 / 33
Регистрация: 05.07.2018
Сообщений: 1,870
Записей в блоге: 7
04.09.2018, 15:42  [ТС]
Уважаемый m-ch,
спасибо. Я такого алгоритма и не знал. То есть знал, что можно
перебрать все перестановки. А потом отсортировать и выкинуть все
повторяющие перестановки. А у вас нечто новое ... буду разбираться ...
это очень интересно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.09.2018, 15:42
Помогаю со студенческими работами здесь

4 задачи( иначе сгорю(
1. Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не...

Решение иным алгоритмом?
Задача 1. Задать 10 случайных натуральных чисел на интервале от 10 до 39 2. Найти алгебраическую сумму этих чисел при условии, что...

Не могу разобраться с алгоритмом(блок схемы) для решения простой задачи
Вводятся числа a и b. Найти количество чисел в диапазоне , у которых последняя цифра равна 7. Вот мой вариант,но он не верен.. Вот...

Решение сравнений первой степени методом Эйлера и алгоритмом Евклида
Помогите написать программу для решения сравнений методом Эйлера и алгоритмом Евклида. Уже неделю сижу и не могу понять сами методы, а...

задачи с двумерным массивом, решение должно быть похоже на решение 8-ми классника
Без рандома, все вводится с клавиатуры, без Inc, без Break и т.д. 1)Сколько учеников не имеет в году задолженностей? 2)Распечатать...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru