Первая задача, задача
"счастливый билет" дается с готовым решением.
Кондуктор в автобусе отрывает билетик и вы
невольно проверяете, счастливый он или нет. И если сумма первых трех цифр равна
сумме трех последних, у вас чуть-чуть поднимается настроение. Посчитать общее
количество таких билетиков для шестизначных номеров, используя школьные знания
по «размещениям, сочетаниям и перестановкам», совсем не просто. Однако
компьютер может решить эту задачу, что называется, «в лоб», просто перебрав
весь миллион номеров.
Для Юстбейсика текст выглядет так:
'просчитать все варианты выпадения
"счастливого билета"
' для
последовательности 000 001 . . 999
999 ответ: 55251.
' первый вариант решения - прямой подсчет
global
a,b
CLS
PRINT
"начало
работы"
FOR k = 1
TO 999
a=k :XX=0 :CALL Summa
g=b 'сумма левой части
FOR m =
1 TO 999
a=m : CALL Summa
IF g =b THEN X = X + 1 :XX=XX+1
NEXT m
print k, g, XX
NEXT k
PRINT
PRINT "Всего счастливых билетов= "; X
END
SUB Summa
'подсчет суммы цифр
N$ = "000" + STR$(a) :
N$ = RIGHT$(N$, 3)
b = VAL(MID$(N$, 1, 1)) + VAL(MID$(N$, 2,
1)) + VAL(MID$(N$, 3, 1))
END SUB
-----------------------------------------------------------
Для Q-Basic идет такой текст:
DECLARE
SUB Summa (a%, b%)
CLS
SCREEN 11
PRINT
"The beginning of work"
t1 = TIMER
X = 0
FOR k% =
1 TO 999
CALL Summa(k%, S1%)
FOR kk% = 1 TO 999
CALL Summa(kk%, S2%)
IF S1% = S2% THEN X = X + 1
NEXT kk%
' IF k% =
500 THEN PRINT "*"; X; "_";
NEXT k%
PRINT
t2 =
TIMER
PRINT
"Quantity of happy tickets= "; X
PRINT
"spent time="; t2 - t1
PRINT
"press any key"
WHILE
INKEY$ = "": WEND
END
SUB Summa
(a%, b%)
N$ = STR$(a%): N$ = "000" +
MID$(N$, 2): N$ = RIGHT$(N$, 4)
b% = VAL(MID$(N$, 1, 1)) + VAL(MID$(N$, 2,
1)) + VAL(MID$(N$, 3, 1)) + VAL(MID$(N$, 4, 1))
END SUB
**********************************
Однако для этой задачи можно найти более удачный алгоритм, по которому
программа идет мгновенно.
Для Юстбейсика текст выглядет так:
'просчитать все варианты выпадения
"счастливого билета"
' для
последовательности 000 001 . . 999
999 ответ: 55251
' второй вариант решения - идет скорее
DIM AA(27)'
возможные суммы трех цифр 1 ... 27
global
a,b
CLS
PRINT
"начало
работы"
FOR a = 1
TO 999
CALL Summa
AA(b) = AA(b) + 1
NEXT a
PRINT
"для суммы цифр ";
" ....... "; " вариантов"
FOR k = 1
TO 27
PRINT
" .
. . .
. . .
. . .
";k; " .. "; AA(k);" .
. . .
. . .
."
X = X +
AA(k) ^ 2
NEXT
print
:PRINT "Найдено
вариантов= ";
X
END
SUB
Summa ' подсчет суммы цифр
N$ = "000" +STR$(a): N$ = RIGHT$(N$, 3)
b = VAL(MID$(N$, 1, 1)) + VAL(MID$(N$, 2,
1)) + VAL(MID$(N$, 3, 1))
END SUB
-----------------------------------------------------------
Для Q-Basic идет такой текст:
DECLARE SUB Summa (a%, b%)
CLS
SCREEN 11
PRINT
"The beginning of work"
t1 = TIMER
X = 0
FOR k% =
1 TO 999
CALL Summa(k%, S1%)
FOR kk% = 1 TO 999
CALL Summa(kk%, S2%)
IF S1% = S2% THEN X = X + 1
NEXT kk%
' IF k% =
500 THEN PRINT "*"; X; "_";
NEXT k%
PRINT
t2 =
TIMER
PRINT
"Quantity of happy tickets= "; X
PRINT
"spent time="; t2 - t1
PRINT
"press any key"
WHILE
INKEY$ = "": WEND
END
SUB Summa
(a%, b%)
N$ = STR$(a%): N$ = "000" +
MID$(N$, 2): N$ = RIGHT$(N$, 4)
b% = VAL(MID$(N$, 1, 1)) + VAL(MID$(N$, 2,
1)) + VAL(MID$(N$, 3, 1)) + VAL(MID$(N$, 4, 1))
END SUB
Для Юстбейсика приведенные тексты можно просто переносить в рабочее
окно через стандартный буфер обмена (копировать – вставить).
Для работы в Юстбейсике на кириллице (русскоязычность) нужно в рабочем
окне войти в «Setup»,
выбрать «Editor
font» и выбрать
в «наборе символов» «кириллический».
|