Строка из натуральных чисел (2) - QBasic

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

Дана строка, построенная из последовательных натуральных чисел от 1 до 4027. (12345678910111213141516171819 ... 4027) Требуется вычислить длину новой строки, выкидывая из исходной все повторяющиеся подряд цифры. Пример. Строка 1333344477778. Новая строка 13478 (ответ 5) Эта программа сосчитала, что новая строка будет иметь длину 13497 цифр. Так ли это? (я тоже могу ошибаться)
REM
REM  123456789101112 ... 4027
REM  (длина числа 15001 цифр)
REM  OTBET: 13497
REM
 
DECLARE FUNCTION STO$ (n!)
DECLARE FUNCTION M$ (n!)
 
CLS
DIM SHARED s AS STRING
 
FOR i = 1 TO 4027
   s = s + STO(i)
NEXT
 
FOR i = 1 TO 15000
   IF M(i) = M(i + 1) THEN k = k + 1
NEXT
 
PRINT LEN(s) - k
END
 
FUNCTION M$ (n)
   M = MID$(s, n, 1)
END FUNCTION
 
FUNCTION STO$ (n)
   STO = LTRIM$(STR$(n))
END FUNCTION

Код к задаче: «Строка из натуральных чисел (2) - QBasic»

textual
uses sysutils;
 
var
  s : string;
  i, j, len : integer;
  ch : char;
 
begin
  ch := #0;
  for i := 1 to 4027 do
  begin
    s := inttostr(i);
    for j := 1 to length(s) do
      if s[j] <> ch then
      begin
        ch := s[j];
        inc(len);
      end;
  end;
  writeln(len);
end.

12   голосов, оценка 4.417 из 5


СОХРАНИТЬ ССЫЛКУ