Найти десятизначное число - QBasic

Узнай цену своей работы

Формулировка задачи:

Условие Дано десятизначное число обладающее свойствами 1. первая (слева) цифра этого числа равна числу нулей в этом числе. 2. вторая цифра равна числу единиц в этом числе. 3. третья цифра равна числу двоек в этом числе и так далее... 10. десятая цифра равна числу девяток в этом числе. ... Найти это число ... Решение 1. Что делать? Перебор? Это долго... 2. Значит надо сократить перебор. Как? Обратите внимание на то, что все цифры в этом числе обозначают КОЛИЧЕСТВО цифр!!! А это значит, что СУММА цифр этого числа равна 10. Ведь цифр всего 10. 3. Из предыдущего логического вывода следует, что такие цифры, как 5; 6; 7; 8; 9 могут быть в числе либо 1 раз, либо ни разу. 4. Наложим ещё ограничения Допустим, что число нулей в этом числе 9. То есть число должно выглядеть так 9 000 000 000. Но раз есть цифра 9, то на десятом месте должна стоять цифра 1. То есть имеем 9 000 000 001. Но выходит, что нулей всего 8, а не 9. Вывод Цифр 9 в этом числе нет. Значит на конце числа стоит 0 5. Аналогично можно доказать, что в этом числе отсутствуют цифры 8 и 7. Значит число оканчивается на три нуля. 6. Итак перебор сильно сократился. Что мы имеем? Надо найти семизначное число (три нуля мы всегда в конец допишем), сумма цифр которого равна 10. 7. Вообще можно решить эту задачу аналитически не прибегая к составлению программы. Но меня интересует алгоритм этой задачи в виде программы на qbasic. А ответ я вам и так скажу (решено аналитически). Вот это число 6 210 001 000. 8. Алгоритм проверки числа. Оно ли? Это видимо должен быть двойной цикл (сейчас мы имеем дело с семизначным числом) 8.0 берется первая цифра (число нулей) и подсчитывается число этих нулей (это внутренний цикл) 8.1 берется вторая цифра (число единиц) и считаются единицы в числе и так далее... 9. А в начале то как? Можно задать цикл. И используя функцию RND задать все 7 цифр, а потом составить число и проверить его на правильность. Вероятно массив цифр тоже может подойти. В общем я запутался. Кто поможет?

Решение задачи: «Найти десятизначное число»

textual
Листинг программы
DIM AS LONG i0, i1, i2, i3, i4, i5, i6, i7, i8, i9
DIM a(9) AS LONG
DIM tmr AS SINGLE
 
tmr = TIMER
FOR i0 = 1 TO 9
    PRINT i0
FOR i1 = 0 TO 9
FOR i2 = 0 TO 9
FOR i3 = 0 TO 9
FOR i4 = 0 TO 9
FOR i5 = 0 TO 9
FOR i6 = 0 TO 9
FOR i7 = 0 TO 9
FOR i8 = 0 TO 9
FOR i9 = 0 TO 9
    ERASE a
    a(i0) = a(i0) + 1
    a(i1) = a(i1) + 1
    a(i2) = a(i2) + 1
    a(i3) = a(i3) + 1
    a(i4) = a(i4) + 1
    a(i5) = a(i5) + 1
    a(i6) = a(i6) + 1
    a(i7) = a(i7) + 1
    a(i8) = a(i8) + 1
    a(i9) = a(i9) + 1
    IF a(0)=i0 THEN IF a(1)=i1 THEN IF a(2)=i2 THEN IF a(3)=i3 THEN IF a(4)=i4 THEN IF a(5)=i5 THEN IF a(6)=i6 THEN IF a(7)=i7 THEN IF a(8)=i8 THEN IF a(9)=i9 THEN PRINT i0 & i1 & i2 & i3 & i4 & i5 & i6 & i7 & i8 & i9
NEXT i9, i8, i7, i6, i5, i4, i3, i2, i1, i0
PRINT TIMER - tmr
SLEEP

Объяснение кода листинга программы

В этом коде используется язык программирования QBasic. Вот список действий, которые выполняются в коде, выделенный номерами:

  1. Объявление десяти переменных типа LONG (i0-i9), одной переменной типа SINGLE (tmr) и массива из десяти элементов типа LONG (a).
  2. Засекается время с помощью функции TIMER.
  3. Выполняется цикл от 1 до 9 с помощью оператора FOR.
  4. В каждой итерации цикла выводится значение переменной i0.
  5. Выполняется вложенный цикл от 0 до 9 с помощью оператора FOR.
  6. В каждой итерации вложенного цикла выводится значение соответствующей переменной i1, i2, i3, i4, i5, i6, i7, i8, i9.
  7. После выполнения вложенного цикла, значения всех десяти переменных увеличиваются на единицу.
  8. Проверяется условие, что значения переменных i0, i1, i2, i3, i4, i5, i6, i7, i8, i9 соответствуют значениям элементов массива a(0), a(1), a(2), a(3), a(4), a(5), a(6), a(7), a(8), a(9). Если условие выполняется, выводится строка, состоящая из значений переменных i0, i1, i2, i3, i4, i5, i6, i7, i8, i9.
  9. Выполняется цикл от 9 до 0 с помощью оператора NEXT.
  10. Выводится разница между текущим временем и временем, засеченным в начале программы, с помощью функции TIMER-tmr.
  11. Выполняется пауза с помощью функции SLEEP.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы