Показать сообщение отдельно
Старый 25.10.2016, 13:33   #2 (permalink)
iks2
Member
 
Регистрация: 22.10.2016
Сообщений: 62
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

я нашел решение предложенной задачи, это решение не самое лучшее, но оно работает. Алгоритм состоит в том: итак мы имеем число 111222, если мы это число будем увеличивать на 1, то мы достигнем максимально возможного числа 222111. И если мы при этом будем откидывать все "лишние" числа, то у нас останутся лишь те, что содержат цифры 1 и 2 (по три раза). Эти числа программа и выносит на экран. Их в данном случае всего 20.

Код:
DECLARE FUNCTION SUM$ (x$)
DECLARE FUNCTION f! (s1$, s2$)
CLS
DIM n  AS STRING
DIM n1 AS STRING
DIM n2 AS STRING

n1 = "111222"
n2 = "222111"
PRINT n1

DO
   n = SUM(n1)
   IF f(n, (n2)) THEN PRINT n
   n1 = n
LOOP UNTIL n = n2
END

FUNCTION f (s1 AS STRING, s2 AS STRING)
   DIM s AS STRING

   FOR i = 1 TO LEN(s1)
      s = MID$(s1, i, 1)
      k = INSTR(s2, s)
      IF k THEN MID$(s2, k, 1) = " "
   NEXT i

   s = LTRIM$(s2)
   IF s = "" THEN f = -1 ELSE f = 0
END FUNCTION

FUNCTION SUM$ (x AS STRING)
   DIM s AS STRING

   FOR i = LEN(x) TO 1 STEP -1
      s = MID$(x, i, 1)
      IF s = "2" THEN
         MID$(x, i, 1) = "1"
         GOTO 100
      ELSE
         MID$(x, i, 1) = "2"
         SUM = x
         EXIT FUNCTION
      END IF
100
   NEXT
END FUNCTION
iks2 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070