Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Инфорамтика C4 ответы.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
912.38 Кб
Скачать

Var n, I, V, v1, ch1, ch2, nch1, nch2: integer;

begin

readln(N);

readln(v);

readln(v1);

ch1:=60001; ch2:=60001;

nch1:=60001; nch2:=60001;

if (v mod 2 = 0) and (v1 mod 2 = 0) then begin

if v < v1 then begin

ch1 := v; ch2 := v1;

end

else begin

ch1 := v1; ch2 := v;

end;

end;

if (v mod 2 = 1) and (v1 mod 2 = 1) then begin

if v < v1 then begin

nch1 := v; nch2 := v1;

end

else begin

nch1 := v1; nch2 := v;

end;

end;

if v mod 2 <> v1 mod 2 then begin

if v mod 2 = 0 then begin

ch1 := v; nch1 := v1;

end

else begin

nch1 := v; ch1 := v1;

end;

end;

for i := 1 to N-2 do begin

readln(v);

if v mod 2 = 0 then begin

if v < ch1 then begin

ch2 := ch1; ch1 := v;

end

else if v < ch2 then ch2 := v;

end

else

if v < nch1 then begin

nch2 := nch1; nch1 := v;

end

else if v < nch2 then nch2 := v;

end;

if N = 2 then writeln(v + v1)

else

if ch1+ch2 < nch1+nch2 then

writeln(ch1+ch2)

else writeln(nch1+nch2)

end.

Однако это решение можно еще упростить (этот вариант предложил А. Тарасов, МОБУ СОШ №3 с. Красноусольский Республики Башкортостан). Дело в том, что условные операторы, которые обрабатывают особый случай при N = 2, можно просто убрать из программы. Вот что получится:

Var n, I, V, ch1, ch2, nch1, nch2: integer;

begin

ch1:=60001; ch2:=60001;

nch1:=60001; nch2:=60001;

readln(N);

for i := 1 to N do begin

readln(v);

if v mod 2 = 0 then begin

if v < ch1 then begin

ch2 := ch1; ch1 := v;

end

else if v < ch2 then ch2 := v;

end

else

if v < nch1 then begin

nch2 := nch1; nch1 := v;

end

else if v < nch2 then nch2 := v;

end;

if ch2 = nch2 then writeln(ch1+nch1)

else

if ch1+ch2 < nch1+nch2 then

writeln(ch1+ch2)

else writeln(nch1+nch2)

end.

Действительно, если мы ввели только два чётных числа, они окажутся в перемнных ch1 и ch2, и их сумма будет заведомо меньше, чем nch1+nch2=60001+6001, при этом выводится нужная сумма ch1+ch2. Аналогичная ситуация возникает при вводе двух нечётных чисел.

Если же введено одно чётное число и одно нечётное, то в переменных ch2 и nch2 останутся равные начальные значения 60001, в этом случае просто выводим выводим сумму ch1+ch2.

  1. Уточним условие задачи «по-русски». Есть аббревиатура, состоящая из трех символов, это начальные буквы фамилии, имени и отчества (ФИО). Есть список в формате

<фамилия> <имя> <отчество>

в котором есть не более 10 подходящих адресатов, причем адресаты в списке могут повторяться. Нужно вывести данные всех людей, ФИО которых подходит под аббревиатуру, в порядке убывания частоты встречаемости в этом списке.

Мы знаем, что если требуется сортировка (или вывод списка в определенном порядке), как правило, нужно использовать массивы. Намёк на это есть в условии, где сказано, что подходящих адресатов не более 10. Вводим массив для хранения подходящих ФИО и соответствующие счетчики:

const MAX = 10;