Класс комплексных чисел

Задача.

Напишите класс для хранения комплексных чисел и реализуйте основные операции работы с ними.

Тесты.

Исходные числа Операция Результат
z1 = 2 + 3i

z2 = -1 + 2i

+ 1.0 + 5.0i
3.0 + i
* -8.0 + i
/ 0.8 — 1.4i
3 + 4i  2.0 + i,

-2.0 -i

-1 + 2i pow -3.0 — 4.0i

Код программы

Ссылка на Ideone.

e-olymp 982. Связность

Задача. Проверить, является ли заданный неориентированный граф связным, то есть что из любой вершины можно по рёбрам этого графа попасть в любую другую.

Входные данные

В первой строке заданы количество вершин n и ребер m в графе соответственно (1 \leq n \leq 100, 1 \leq m \leq 10000). Каждая из следующих m строк содержит по два числа u_i и v_i (1 \leq u_i, v_i \leq n);  каждая такая строка означает, что в графе существует ребро между вершинами u_i и v_i.

Выходные данные

Выведите «YES», если граф является связным и «NO» в противном случае.

Тесты

Test Input Output
1 4 2
1 2
3 4
NO
2 5 4
1 2
5 3
4 5
3 4
NO
3 5 4
1 2
5 1
3 5
4 3
YES

Код программы

 

Алгоритм

Чтобы установить, является ли граф связным, я использовала удобный для этого алгоритм поиска в ширину. Он заключается в следующем: начиная с какой-то вершины, мы поочередно просматриваем все вершины, соседние с ней. Каждую посещенную вершину мы помечаем маркером. Затем повторяем этот процесс для каждой из соседних вершин, и так далее. Поиск будет продолжаться, пока мы не обойдем все вершины, которые можно достигнуть из данной. Если после этого в графе осталась хотя бы одна не помеченная вершина, значит из нее нельзя попасть в помеченные, то есть граф не является связным. При этом неважно, с какой вершины мы будем начинать поиск, ведь нам нужно установить сам факт, связный граф или нет.

 
Ссылка на Ideone

e-olymp 6123. Стек с защитой от ошибок

Задача

Стек с защитой от ошибок

Реализуйте структуру данных «стек«. Напишите программу, содержащую описание стека и моделирующую работу стека, реализовав все указанные здесь методы. Программа считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения каждой команды программа должна вывести одну строчку. Возможные команды для программы:

push n

Добавить в стек число n (значение n задается после команды). Программа должна вывести ok.

pop

Удалить из стека последний элемент. Программа должна вывести его значение.

back

Программа должна вывести значение последнего элемента, не удаляя его из стека.

size

Программа должна вывести количество элементов в стеке.

clear

Программа должна очистить стек и вывести ok.

exit

Программа должна вывести bye и завершить работу.

Входные данные

Команды для стека.

Выходные данные

Соответствующие значения для каждой команды(см. выше).

Тесты

Последовательность Результат
1 push 2
back
pop
size
pop
push 1
size
exit
ok
2
2
0
error
ok
1
bye
2 push 3
push 1
push 5
size
pop
size
exit
ok
ok
ok
3
5
2
bye
3 back
push 9
pop
pop
exit
error
ok
9
error
bye
4 size
push 1
size
back
pop
exit
0
ok
1
1
1
bye

Код

Решение

Создаем структуру в которой реализуем все команды для стека с помощью функций и указателя cursorcursor указывает на последний элемент в строке. Изначально cursor , т.к. элементы в массиве, на которые бы он указывал, отсутствуют.

push n  записывает в ячейку с номером cursor элемент n.size возвращает cursor т.е. действительный размер стека.pop возвращает последний помещённый в стек элемент, то есть элемент с номером pointer+1 , при этом удаляя его из стека. back возвращает последний помещённый в стек элемент, то есть элемент с номером cursor-1.В обоих случаях для проверки того, пуст ли стек, используется логическая функция error. clear обнуляет массив cursor и присваивает cursor начальное значение = -1.Команды считываются и выполняются пока не будет введено exit, после чего выведется соответствующее сообщение и программа завершится.

Ссылка на Ideone

e-olymp 378. Таинственная записка

Задача e-olymp 378.

Условие

Недавно Маша и Катя узнали, что в мире существуют злые хакеры, которые могут запросто вскрыть чужую переписку. Поэтому решили они пересылать только зашифрованные сообщения. Для этой цели подруги стали использовать перестановочный код, где каждая буква заменяется другой. Например:

Закодированное сообщение: HPC PJVYMIY

Декодированное сообщение: ACM CONTEST

В этом примере выполнены следующие замены: H=A, P=C, C=M, J=O, V=N, Y=T, M=E иI=S.

Чтобы не заниматься кодированием и декодированием вручную, подруги просят Вас написать программу. Помогите девочкам!

Входные данные

В первой строке входного файла записано закодированное сообщение. Вторая строка –26 латинских букв верхнего регистра, представляющих собой код для соответствующего символа алфавита: первый символ дает код для A, второй для B и так далее. Используются только буквы верхнего регистра. В закодированном сообщении могут появиться пробелы, которые должны быть сохранены в выходной строке.

Выходные данные

В выходной файл вывести одну строку, в которой содержится расшифрованное сообщение.

Тесты

Входные данные Выходные данные
HPC PJVYMIYBLMRGJIASOPZEFDCKWYHUNXQTV ACM CONTEST
FDY GAI BG UKMY
KIMHOTSQYRLCUZPAGWJNBVDXEF
THE SKY IS BLUE
LJBSLJL IJWWDEJ
KCFAGWRZMEXDNUYHVBOIJLSTPQ
DECODED MESSAGE

Код

Решение

Чтоб расшифровать послание, нужно определить порядковый номер каждого символа, из введённого сообщения, в алфавите. Потом заменить их символом соответствующего порядкового номера из второй введённой строки.

Ссылка на Ideone

A278

Задача A278

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

Даны натуральные числа n_{1},\dots,n_{m}, действительные числа x_{1},\dots,x_{m}. Вычислить \frac{n_{1}\cdot x_{1}+\dots+n_{m}\cdot x_{m}}{n_{1}+\dots+n_{m}}.

Тестирование

Входные данные Выходные данные
1. 1 2 4 -1 -0.4
2. 1 2 3 4 5 0.6 1.88889
3. 5 -2 1 0.2 3 -3 2 0 -1.70909
4. 10 3.3 4 0.4 6 0.01 8 1 1 8 1.7469
5. 3 -0.5 2 -0.4 1 -0.3 5 32 11 5 20 -1 4.58095

 

Код

Алгоритм решения (потоковая обработка)

Считываем числа до конца входного потока и поочередно записываем их в переменные n и n соответственно.
Пока вводятся данные:

  1. Вычисляем значение выражения n_1\cdot x_1+\dots+n_m\cdot x_m, накапливая сумму в числитель n.
  2. Вычисляем значение выражения n_1+\dots+n_m, накапливая сумму  в делителе n.
  3. Находим результат n от деления n на  n

Код на ideone.com

A406

Задача

С помощью x_{ij}, i=1,2; j=1,\ldots,n. – действительной матрицы на плоскости задано n точек так, что x_{1j}, x_{2j} – координаты j – точки. Точки попарно соединены отрезками. Найти длину наибольшего отрезка.

Тест

n Матрица x_{ij}, i=1,2. Длина наибольшего отрезка  Комментарий
3 2 8 4

9 1 5

10 Пройдено
4 6 14 2 1

9 3 8 0

13.3417 Пройдено
5 1 8 4 3 7

2 9 5 0 11

11.7047 Пройдено

Код программы:

 

Ход решения:

  1. Вводим матрицу.
  2. Находим длину наибольшего отрезка.
    С помощью вложенных циклов мы находим длины всех отрезков по формуле
     AB=\sqrt{(x_{2}-x_{1})^{2}+(y_{2}-y_{1})^{2}}, A(x_{1},y_{1}), B(x_{2},y_{2}).
  3. По алгоритму нахождения максимума находим длину наибольшего отрезка.
  4. Выводим матрицу.
  5. Выводим длину наибольшего отрезка.
    Ссылка на код

Ю4.15

Заданы массивы A(n) и B(m). Получить массив C(m+n), расположив в начале его элементы массива A, а затем элементы массива B.

Тесты:

n m A[n] B[m] Результат:
3 4 0 1 2 5 7 8 4 A={0 1 2}
B={5 7 8 4}
C={0 1 2 5 7 8 4}
2 9 9 3.6 7.4 3.6 4.6666 7.99702 1 1 1 1 1 A={9 3.6}
B={7.4 3.6 4.6666 7.99702 1 1 1 1 1}
C={9 3.6 7.4 3.6 4.6666 7.99702 1 1 1 1 1}

Код

Решение
Задаем размерности массивов. Вводим их. Затем заполняем массив C элементами сначала из массива A (A элементов), а затем (с A-ого элемента ) — элементами из массива A. Выводим массив C.

Код на ideone.com

ML14

Задача. Вычислить период колебания маятника длины l.

Входные данные

Длина нити маятника l.

Выходные данные

Период колебаний маятника.

Тесты

Входные данные Выходные данные
1 0,3 1.09891
2 1 2.00632
3 40 12.6891

Код программы

 

Решение

Условием задачи было вычислить период колебаний маятника T, имея длину маятника l. Период колебаний маятника можно рассчитать с помощью формулы: T = 2\pi\sqrt{\frac{l}{g}}. Мы объявляем три переменные типа double T, l, g, где T-период колебаний маятника, l – длина маятника,  g9.8075 – ускорение свободного падения на поверхности Земли в Одессе.  l  – входной параметр. Затем, используя формулу T = 2\pi\sqrt{\frac{l}{g}}, вычисляем и выводим значение периода.

 

Решение на ideone.com

e-olymp 127. Баксы в банке

Условие

Папа Карло подарил Буратино 1 доллар в его первый день рождения, а экономный Буратино сложил подарок в банку. Каждый последующий год папа Карло удваивал свой предыдущий подарок и прибавлял к нему столько долларов, сколько лет исполнилось Буратино, а тот в свою очередь продолжал складывать баксы в банку. На какой N-й день рождения в банке будет не менее чем S долларов?

Входные данные

Единственное число – значение S. 1\le S \le 240.

Выходные данные

Искомое значение N.

Задача взята с сайта e-olymp.

Тесты

Входные данные Выходные данные
15 3
25 4
9 3
99 5
199 6
333 7
56 5
478 8
809 8

 

Код

Решение

В данной задаче sum – сколько долларов в банке, p – сколько долларов Папа Карло подарил Буратино. Пока sum<s мы увеличиваем N на 1 и считаем сколько Папа Карло подарит Буратино p=p\cdot 2+n и суммируем его с тем что лежит в банке sum += p.

Задача на Ideone.com

ML 24

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

Треугольник задан длинами сторон. Найти радиус вписанной r и описанной R окружностей.

Тесты :

a b c r R
3 4 5 1 2.5
7.5 10 13 2.450117 6.5236096
1 3 4 0 inf
1 1 3 Не существует! Не существует!

Код программы :

Алгоритм :

В начале проверяем существует ли треугольник. В треугольнике сумма длин любых двух сторон больше длины третьей (или равна ее длине, если треугольник является вырожденным). Если нет, сообщаем об этом пользователю :

Если треугольник существует, проводим следующие вычисления (порядок сохранен) :

  1. Вычисляем полупериметр p треугольника: p\frac{a + b + c}{2}
  2. Находим площадь S по формуле Герона: S = \sqrt{p(p-a)(p-b)(p-c)}
  3. Вычисляем радиус r вписанной окружности по формуле: r\frac{S}{p}
  4. Вычисляем радиус R описанной окружности по формуле: R\frac{abc}{4S}

Работающая версия программы на Ideone.com :
Ideone.com