З а д а ч а  1     (   б и л е т   )

       Первая задача, задача  "счастливый билет" дается с готовым решением.

         Кондуктор в автобусе отрывает билетик и вы невольно проверяете, счастливый он или нет. И если сумма первых трех цифр равна сумме трех последних, у вас чуть-чуть поднимается настроение. Посчитать общее количество таких билетиков для шестизначных номеров, используя школьные знания по «размещениям, сочетаниям и перестановкам», совсем не просто. Однако компьютер может решить эту задачу, что называется, «в лоб», просто перебрав весь миллион номеров.

Для Юстбейсика текст выглядет так:

 

'просчитать все варианты  выпадения  "счастливого билета"

' для  последовательности 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» и выбрать в «наборе символов» «кириллический».

 

 

 

 

 [Home]     [ Glav]



Hosted by uCoz