районные олимпиады по программированию.Решение и разбор задач.

var s:string;
N:INTEGER;

begin
assign(input,'input.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);

readln(n);
read(s);
writeln(s);
while pos('ДМ',S)<>0 do
begin
if s[n]='М' THEN
begin
WRITELN(pos('Д',s),'-',N);
s[n]:='Д';
s[pos('Д',s)]:='М';
WRITELN(S);
END;
DEC(N);
END;
end.

Анализ и разбор задачи.Знания и умения.
Условие задачи:

Задача 1. Перестановки ( 4 балла).

На уроке физкультуры выстроились в одну шеренгу мальчики и девочки.Учитель решил переставить ребят так, чтобы впереди стояли мальчики, а за ними - девочки. Помогите учителю переставить ребят так, чтобы количество перестановок было минимиальным.Решение вывести в виде последовательности пар номеров ребят, стоящих в шеренге и участвующих в перестановке.

Входные данные: в первой строке количество ребят, во второй строка из последовательности М-мальчики и Д-девочки

Выходные данные: перестановки в виде порядковых номров мальчиков и девочек через знак тире

INPUT.TXT
8
ДДММДММД

OUTPUT.TXT
1-7
2-6

Алгоритм

1)из входного файла input.txt считываем количество ребят и записываем их в строку S

2)создаем цикл с предусловием существования неправильной построки "ДМ" в исходной строке S
while(pos('ДМ',S)<>0 do

3)проверяем с конца строки позицию вхождения подстроки 'М'и заменяем первую девочку на мальчика, организовываем печать позиций перестановки через тире
if s[n]='М' THEN
begin
WRITELN(pos('Д',s),'-',N);
s[n]:='Д';
s[pos('Д',s)]:='М';
END;

4)уменьшаем на еденицу просмотр строки с конца и возвращаемся в цикл с предусловием
dec(n)

Знать:

  • оператор выбора "if <условие> then <оператор>"
  • цикл с предусловием while...
  • процедуры и функции обработки строковых переменных
    pos(a,b),где вычисляется номер позиции, начиная с которой подстрока "а" первый раз содержится в строке "b"


Уметь:
  • работать с входными и выходными файлами input.txt output.txt
домой
Hosted by uCoz