Блог учителя Информатики

Комментарии отключены

Решение олимпиадных задач по информатике: От перестановки чисел что-то меняется

Сегодня решаем олимпиадную задачу по информатике городского этапа 2020 года. Задача: «От перестановки чисел что-то меняется». 7 — 8 класс.


Условие задачи:

Всем известно, что «от перестановки слагаемых сумма не изменяется». Однако, случается и так, что перестановка двух чисел приводит к более интересным последствиям. Пусть, например, заданы три числа: a1, a2, a3. Рассмотрим равенство a1 + a2 = a3. Оно может быть не верным (например, если a1 = 1, a2 = 4, a3 = 3), однако может стать верным, если поменять некоторые числа местами (например, если поменять местами a2 и a3, оно обращается в равенство 1 + 3 = 4). Ваша задача – по заданным трем числам определить, можно ли их переставить так, чтобы сумма первых двух равнялась третьему.

a1 = int(input())
a2 = int(input())
a3 = int(input())
answer = 'NO'

if a1 + a2 == a3:
    answer = 'YES'
if a1 + a3 == a2:
    answer = 'YES'
if a2 + a3 == a1:
    answer = 'YES'

print(answer)

Так же условие можно заменить следующим образом. Это позволит не проверять оставшиеся условия, если выполнится только одно.

if a1 + a2 == a3:
    answer = 'YES'
elif a1 + a3 == a2:
    answer = 'YES'
elif a2 + a3 == a1:
    answer = 'YES'

Все условия можно записать одним выражением:

if a1 + a2 == a3 or a1 + a3 == a2 or a2 + a3 == a1:
    answer = 'YES'
a1 = int(input())
a2 = int(input())
a3 = int(input())
answer = 'NO'

s = a1 + a2 + a3
m = max(a1, a2, a3)
if m == s - m:
    answer = 'YES'

print(answer)
var
  a1,a2,a3:integer;
  answer:string;
  
begin
  read(a1);
  read(a2);
  read(a3);
  answer := 'NO';
  if a1 + a2 = a3 then answer := 'YES';
  if a1 + a3 = a2 then answer := 'YES';
  if a2 + a3 = a1 then answer := 'YES';
  write(answer);
end.
var
  a1,a2,a3,m,s:integer;
  answer:string;


function max(a, b:integer):integer;
begin
  if a > b then result := a else result := b;  
end;

  
begin
  read(a1);
  read(a2);
  read(a3);
  answer := 'NO';
  
  s := a1 + a2 + a3;
  m := max(a1, max(a2, a3));
  if s - m = m then answer := 'YES';
  write(answer);
end.
Поделиться:
Вам также может понравится
Решение олимпиадных задач по информатике: Наименьший остаток
Решение олимпиадных задач по информатике: Последовательность
Делаем Черепашку в виде снежинки
Пишем игру «15 спичек» на python