я нашел решение предложенной задачи, это решение не самое лучшее, но оно работает. Алгоритм состоит в том: итак мы имеем число 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