Ниже записан алгоритм, который вводит натуральное число x, выполняет преобразования, а затем выводит одно число. укажите наименьшее возможное значение x, при вводе которого алгоритм выведет число 8.
PascalABC.NET 3.3.5, сборка 1660 от 20.04.2018 Внимание! Если программа не работает, обновите версию!
procedure Preobraz(var Stroka:string); begin var bq:=new Queue<(integer,integer)>; foreach var m in Stroka.Matches('\s+') do bq.Enqueue((m.Index,m.Length)); var wq:=new Queue<(integer,string)>; foreach var m in Stroka.Matches('\S+') do if m.Value.Any(t->t in ['0'..'9']) then wq.Enqueue((m.Index,'')) else wq.Enqueue((m.Index,m.Value)); Stroka:=''; var pbi,pwi:integer; while (bq.Count>0) and (wq.Count>0) do begin (pbi,pwi):=(bq.Peek[0],wq.Peek[0]); if pbi<pwi then begin Stroka:=Stroka+bq.Peek[1]*' '; bq.Dequeue end else begin Stroka:=Stroka+wq.Peek[1]; wq.Dequeue end end; while bq.Count>0 do begin Stroka:=Stroka+bq.Peek[1]*' '; bq.Dequeue end; while wq.Count>0 do begin Stroka:=Stroka+wq.Peek[1]; wq.Dequeue end end;
begin var s:=ReadlnString; Preobraz(s); s:='<'+s+'>'; // чтобы было видно, как работает s.Println end.
Не такое оно и сложное. Главная проблема - то, что между словами может быть несколько пробелов. Устраним её, написав функцию, которая оставляла бы между словами по 1 пробелу:
function RemoveSpaces(str : string) : string; begin //Тут цикл for, переписанный через while var iter := 1; //Проходим по строке while (iter < str.Length) do begin //Если видим 2 пробела подряд, удаляем 1 и откатывает итератор. if (str[iter] = ' ') and (str[iter + 1] = ' ') then begin str := str.Remove(iter, 1); iter -= 1; end; iter += 1; end; RemoveSpaces := str; end;
Теперь мы можем получить кол-во слов очень просто:
function CalcWords(str : string) : integer; begin CalcWords := RemoveSpaces(str).Split(' ').Count(); end;
Т.е. мы делим строку на массив через пробелы, и считаем кол-во элементов массива.
полный код: https://pastebin.com/A63ggdWm
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку