понеділок, 31 жовтня 2011 р.

2. Разветвляющиеся алгоритмы


Мы полагаем, что Вы уже сталкивались с условным оператором и понимаете как он работает. Хотелось бы, чтобы в в этом разделе Вы закрепили свои знания на примере решения простых олимпиадных задач с использованием условий.
Напомним так же, что в языке Си наряду с условным оператором существуют так же операторы switch и "?", а в языке Pascal - оператор case. Например, в языке Си при нахождении максимального элемента из двух чисел вместо следующего условного оператора:
if(a > b) max=a; else max=b;
можно использовать следующий вариант записи:
max=(a>b)?a:b;

Список задач

Задача 1: Зарплата (Время: 1 сек. Память: 16 Мб Сложность: 4%)
В отделе работают 3 сотрудника, которые получают заработную плату в гривнах. Требуется определить: на сколько зарплата самого высокооплачиваемого из них отличается от самого низкооплачиваемого.
Входные данные. В единственной строке входного файла INPUT.TXT записаны размеры зарплат всех сотрудников через пробел. Каждая заработная плата – это натуральное число, не превышающее 105.
Выходные данные. В выходной файл OUTPUT.TXT необходимо вывести одно целое число — разницу между максимальной и минимальной зарплатой.
Примеры
INPUT.TXT
OUTPUT.TXT
1
100 500 1000
900
2
36 11 20
25
 Просьба - не решайте "в лоб"
Задача 2: Арифметика (Время: 1 сек. Память: 16 Мб Сложность: 5%)
В прошлом году Вася пошел в школу и научился считать. В этом году он изучил таблицу умножения и теперь умеет перемножать любые числа от 1 до 10 без ошибок. Друг Петя рассказал ему про системы счисления, отличные от десятичной. В частности, про двоичную, восьмеричную и даже шестнадцатеричную. Теперь Вася без труда (но уже с помощью листка и ручки) может перемножать числа от 1 до 10 и в этих системах, используя перевод из нестандартной системы в десятичную и обратно из десятичной. Например, если Васе нужно перемножить числа 101 и 1001 в двоичной системе, то он сначала эти числа переводит в десятичное представление следующим образом:
(101)2=1*22+0*21+1*20=4+0+1=5
(1001)2=1*23+0*22+0*21+1*20=8+0+0+1=9
После чего перемножение чисел 5 и 9 Вася с легкостью производит в десятичной системе счисления в уме и получает число 45. Далее производится перевод из десятичной системы счисления в двоичную. Для этого Вася делит число 45 на 2 (порядок системы счисления), запоминая остатки от деления, до тех пор пока в результате не останется число 0:

Ответ составляется из полученных остатков от деления путем их записи в обратном порядке. Таким образом Вася получает результат: (101)2 * (1001)2 = (101101)2. Но теперь Вася изучает таблицу умножения чисел от 1 до 100 в десятичной системе счисления, а поскольку запомнить такую таблицу очень сложно, то Васе придется очень долго ее зубрить. Составьте для Васи программу, которая поможет ему проверять свои знания.
Входные данные. Во входном файле INPUT.TXT записаны три натуральных числа A, B и C через пробел. Числа A и B <= 102, а C <= 106.
Выходные данные. В выходной файл нужно вывести YES в том случае, если A*B=C и вывести NO в противном случае.
Примеры
INPUT.TXT
OUTPUT.TXT
1
8 54 432
YES
2
16 19 777
NO

Задача 3: Счастливый билет (Время: 1 сек. Память: 16 Мб Сложность: 12%)
Вы пользуетесь общественным транспортом? Вероятно, вы расплачивались за проезд и получали билет с номером. Счастливым билетом называют такой билет с шестизначным номером, где сумма первых трех цифр равна сумме последних трех. Т.е. билет с номером 385916 – счастливый, т.к. 3+8+5=9+1+6. Вам требуется написать программу, которая проверяет счастливость билета.
Входные данные. В единственной строке входного файла INPUT.TXT записано одно целое число N (0 ≤ N < 106).
Выходные данные.В выходной файл OUTPUT.TXT нужно вывести «YES», если билет с номером N счастливый и «NO» в противном случае.
Примеры
INPUT.TXT
OUTPUT.TXT
1
385916
YES
2
123456
NO
 Читайте условие и думайте! (а нужно ли условие :))
Задача 4: Две окружности (Время: 1 сек. Память: 16 Мб Сложность: 17%)
На плоскости даны две окружности. Требуется проверить, пересекаются ли они.
Входные данные. Входной файл INPUT.TXT состоит из двух строк. На каждой строке записана информация об одной окружности – координаты ее центра x и y (целые числа, по модулю не превосходящие 5000) и радиус (целое число 1 ≤ r ≤ 1000).
Выходные данные. В выходной файл OUTPUT.TXT выведите «YES», если окружности пересекаются, и «NO» в противном случае.
Примеры
INPUT.TXT
OUTPUT.TXT
1
0 0 2
0 3 2
YES
2
1 1 1
4 4 1
NO
Тут конечно, и математику знать надо ;)

Немає коментарів:

Дописати коментар