A1031

Задача. Получить все перестановки элементов 1, …, 6.

Решение

Все перестановки считаются и выводятся с помощью рекурсивной функции perestanovka().

Когда в ней складывается новый набор элементов, проверяем что бы в нем не было повторяющихся значений (считаем факториал и сумму, они должны совпадать со стандартом (6! = 720,  1+2+3+4+5+6 = 21) и тогда выводим.

Что бы убедиться, что выведено правильное количество перестановок, выводим в конце значение счетчика cnt (находится внутри функции perestanovka()) и требуемое значение перестановок ( 6! = 720). Эти значения совпадают.

А на Java решение выглядит так:
 

Related Images:

А717а

Задача

Две правые треугольные матрицы [latex]A[/latex] и [latex]B[/latex] порядка [latex]n[/latex] заданы в виде последовательности [latex]\frac{\left(n+1\right)*n}{2}[/latex] чисел: сначала идет [latex]n[/latex] элементов первой строки, затем [latex]n-1[/latex] элемент второй строки, начиная со второго элемента, и т. д. (из последней, [latex]n[/latex]-й строки берется только [latex]n[/latex]-й элемент).

Получить матрицу [latex]A*B[/latex].

Тесты

n матрица A матрица B результат (матрица A*B) комментарий
2 1 2

3

4 5

6

4 17

0 18

пройден
3 1 -1 2

4 6

6

1 -1 1

0 0

3

1 -1 7

0 0 15

0 0 18

пройден

Решение

Сначала обнуляем и вводим обе матрицы. Так как они заданы строкой чисел и известно, что они правые треугольные, заполняем ячейки массива, начиная от диагональных элементов.

Умножение выполнимо, потому что оба сомножителя — квадратные матрицы одного и того же порядка. Перемножаем матрицы стандартным способом (строки первой матрицы на столбцы второй).

Ссылка на код.

Related Images:

e-olimp 1098. Ходи ферзем!

Задача о восьми ферзях

Задача о восьми ферзях

Задача. На шахматной доске 8х8 произвольным образом расставлено 8 ферзей, по одному на каждой вертикали, других фигур на доске нет. Ферзь может ходить на любое количество клеток как по диагонали, так и по вертикали или горизонтали, но при этом не может перепрыгивать через другие фигуры. Необходимо добиться такой позиции, в которой ни один ферзь не находится под боем любого другого, и сделать это за минимальное количество ходов.

Входные данные. В одной строке задано сначала натуральное число T (T < 6) — количество тестов. Далее через пробел задано T блоков по 8 целых чисел от 1 до 8 – номера горизонталей, на которых находится ферзь с i-той вертикали. Вертикали пронумерованы подряд.

Выходные данные. Одна строка, содержащая последовательность соответствующих минимальных количеств ходов без пробелов.

Тесты

Входные данные Выходные данные Комментарий
2 1 1 1 1 1 1 1 1 2 4 6 8 3 2 7 5 71 пройден

Решение

«Поиск с возвратом» в задаче о восьми ферзях.
Алгоритм.
При решении задачи используется два массива : массив расстановок из теста и массив правильной расстановки. Первоначально массив правильных расстановок — пустой (все значения элементов массива = -1).

Для вычисления правильных расстановок вызывается рекурсивная функция line_up (параметром которого является номер столбца). Внутри функции line_up вызывается функция check (параметр — номер столбца), она проверяет горизонтальную линию и две диагонали на поля, которые бьет ферзь. Элементам массива правильных расстановок присваиваются номера горизонтальных линий (алгоритм «Поиск с возвратом»).

Как только достигается одна из возможных правильных расстановок вызывается функция calc_min_strok(). Если элемент одного массива не равен элементу другого — это ход. Функция calc_min_strok() вычисляет количество ходов для данной расстановки и решает минимальное оно или нет для данного теста.

Решение на Java:
(Что бы прошло на e-olimp нужно удалить все комментарии)

 

Related Images:

e-olimp 5075

Задача Ориентированный граф задан списком ребер. Найдите степени всех вершин графа.
Входные данные. Входной файл содержит числа [latex]n[/latex]  [latex]\left(1\leq n\leq 100\right)[/latex] — число вершин в графе и [latex]m[/latex] [latex]\left(1\leq m\leq n*\left(n-1\right)\right)[/latex] — число ребер. Затем следует [latex]m[/latex] пар чисел — ребра графа.

Выходные данные. Выведите в выходной файл [latex]n[/latex] пар чисел — для каждой вершины сначала выведите полустепень захода и затем полустепень исхода.

Тесты

Тесты Результат Комментарии
4 41 21 3

2 3

3 4

0 21 12 1

1 0

пройден
4 1
3 2
0 01 00 1

0 0

пройден

Решение

Решение на Java:
 

 

Related Images:

АА24

Задача

 Ввести строку S и целое положительное число N, а также символы C1 и С2. Заменить каждое вхождение символа C1 на N символов C2.

Тесты

Данная строка C1 C2 n Получаемая строка Комментарий
a111a111 a = 3 ===111===111 пройден
omnomnom n —  1 om-om-om пройден
Nina N Z 1 Zina пройден

Решение

 Мы идем по данной строке, если попадаем на символ, который не нужно заменять (не С1), то просто переписываем его в новую строку, если попадаем на символ С1, записываем в созданную новую строку n символов С2.

Код на Java:
 

Related Images:

Ю12.13

Задача

Морзянка. Вводимый с клавиатуры или из файла текст перевести в последовательность точек и тире с помощью азбуки Морзе. Результат можно иллюстрировать звуком.

Тесты:

Текст Результат Комментарий
SOS  …—…  пройден
 A true SOS !!!  .- -…- — .-. ..- . -…- … — … -…- —..— —..— —..— -…-  пройден

 

Код:

Я создала ассоциативный  массив  через map, и связала буквы («ключ«) и соответствующие им значения в азбуке Морзе («значение«). Чтобы не заполнять его еще и большими буквами, во вводимом тексте уменьшаю буквы с помощью функции tolower .  

Решение через c-string :

Ссылки:

string

c-string.

Решение на Java:

 

Related Images:

А412а

Задача

Даны две целочисленные квадратные матрицы порядка 6. Найти последовательность из нулей и единиц [latex]b_{1},\ldots,b_{6}[/latex] такую, что [latex]b_{i}=1[/latex] , когда все элементы [latex]i[/latex]-строки первой матрицы больше соответствующих элементов [latex]i[/latex]-строки второй матрицы.

Тесты

матрица 1 матрица 2 строка комментарий
2   4  5  6  7  0

5   6  7  3  0  2

-7 9 -5 90 32 11

45  7  -1  3 4  7

2   2   2   2  2  2

5  7  5   8   3  1

1   3 -5  -6  4 -4

2   5  9  4  1  3

7 6 -2 0 56 19

5  6  -2  1 3  0

1  1  1  1  1  1

2    4   7   2  0  1

100110 пройден
9 8 7 6 7 8

2 3 4 5 6 7

1 9 6 0 3 5

5 8 -2 3 4 5

9 7 6 5 4 3

7 6 4 3 2 6

9 8 7 6 7 8

1 2 2 2 2 2

1 9 6 0 3 5

0 0 -4 0 0 0

9 7 6 5 4 3

1 1 1 1 1 1

010101 пройден

Код

Ссылка на код.

Код на Java:

 

Related Images:

Ю3.42

Задача

Расписание звонков. В учебном заведении задается начало учебного дня,  продолжительность «пары» или урока, продолжительность обычного и большого перерывов (и их «место» в расписании), количество пар(уроков). Получить расписание звонков на весь учебный день.
Задаем начальные значения в теле программы.
Начало урока — 8:45
Продолжительность обычной перерыва — 30 минут.
Продолжительность большого перерыва — 45 минут.
Место в расписании и количество уроков задается в массиве time_table .
Результат:

Решение:

Используется структура tm для хранения времени.

Ссылка на код.

Решение на Java:

 

Related Images:

Ю4.31

Задача

Циклический сдвиг. Осуществить циклический сдвиг элементов массива [latex]T\left(n\right)[/latex] на  [latex]m[/latex] позиций влево, то есть получить массив: [latex]t_{m+1},\ldots t_{n}, t_{1},\ldots t_{m}[/latex].
ри этом необязательно [latex]m<n[/latex].

Тесты:

изначальный массив сдвиг (m) результат комментарий
1 2 3 4 5 6 7 2 3 4 5 6 7 1 2 пройден
1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 пройден
1 2 3 4 5 6 7 10 4 5 6 7 1 2 3 пройден

 

 

Ссылка на код.

Код на Java:

 

 

Related Images:

А165ж

Задача

Даны действительные числа  [latex]a_{1},a_{2}[/latex] … Известно, что  [latex]a_{1}>0[/latex]  и что среди [latex]a_{2}, a_{3}[/latex]  … есть хотя бы одно отрицательное число. Пусть  [latex]a_{1},\ldots,a_{n}[/latex]  — члены данной последовательности, предшествующие первому отрицательному члену ( [latex]n[/latex]   заранее неизвестно). Получить:

[latex]a_{1}a_{2}+a_{2}a_{3}+\ldots+a_{n-1}a_{n}+a_{n}a_{1}[/latex]  .

Тесты:

Введенные числа Результат Комментарий
2 3 4 -5 26 пройден
6 0 45 3 -1 153 пройден
1 -223 1 пройден

Решение:

Программа считает по формуле (данной в условии) все введенные положительные числа, пока не встретится отрицательное число.

Ссылка на код.

А на Java решение выглядит так:

 

 

Related Images:

Ю3.2

Задача: Периодические функции. Утверждается, что функция [latex]y = f\left ( x \right)[/latex] периодическая с периодом  [latex]T[/latex]. Проверить это численно, вычислив функцию с постоянным шагом на отрезке [latex]\left [ 0,5T \right ][/latex]. Учесть погрешность вычислений и возможные точки разрыва функции. Проверить на примере функций:
[latex]y=\sin^{2}x[/latex],     [latex]y=\tan x[/latex]           [latex]\left (T=\pi\right)[/latex];
[latex]y=\frac{1}{x}\cdot \sin x[/latex]              [latex]\left (T=2\pi\right)[/latex]

Continue reading →

Related Images:

А35а

Задача

Даны действительные числа [latex]x,y,z[/latex] . Вычислить [latex]max\left ( x+y+z,xyz \right )[/latex].

x y z Результат Комментарий
2 5 6 60 пройден
2 2 1 5 пройден
0 1 125 126 пройден
-23 56 7 40 пройден

 

Код:

Поиск максимального из двух чисел [latex]a=x+y+z[/latex] и [latex]b=x\cdot y\cdot z[/latex]

(Если числа одинаковые, то выведется второе, но на результат это не влияет. )

А на Java решение выглядит так:

 

 

Ссылка на код.

Related Images:

Ю2.19

Задача

   Привал.

Путник двигался   [latex]t_{1}[/latex]   часов со скоростью   [latex]v_{1}[/latex]  , затем  [latex]t_{2}[/latex]   часов — со скоростью  [latex]v_{2}[/latex]  и  [latex]t_{3}[/latex]  часов — со скоростью   [latex]v_{3}[/latex] .

За какое время он одолел первую половину пути, после чего запланировал привал?

[latex]t_{1}[/latex] [latex]t_{2}[/latex] [latex]t_{3}[/latex]  [latex]v_{1}[/latex]  [latex]v_{2}[/latex] [latex]v_{3}[/latex] Результат Комментарии
2 3 4 90 80 30 3.125 пройдено
9 85 3 450 230 20 42.826 пройдено
 4.5 75.9 3.124 100 0  0  2.25 продено

 

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

В задаче нужно было найти за какое время путник преодолеет половину пути. Для удобства работы с данными была введена структура данных path, которая включает в себя — время и скорость на участке, а также длину участка.

Расстояние и время вычисляется по формулам:

[latex]s=t\cdot v[/latex]

 

[latex]t=\frac{s}{v}[/latex]

Так как значения времени и скорости не могут быть отрицательными, то дополнительно были проверены граничные условия для скорости и времени.

 

Ссылка на код здесь.

Второе решение:

ссылка на  код 

Решение на Java:

 

 

Related Images:

Ю1.11

Задача

     Комплексное число. Заданы действительная и мнимая части комплексного числа     [latex]z=x+\imath \cdot y[/latex] .  Преобразовать его в тригонометрическую форму и напечатать в виде выражения:

[latex]z=r\cdot\left(\cos\varphi+\sin \varphi\right)[/latex] .

     Для справки:    [latex]r=\sqrt{x^{2}+y^{2}}[/latex] ;      [latex]\varphi= \text{arctg} \left(\frac{y}{x}\right)[/latex]  .

x

y

Результат

Комментарий

4

2

z = 4.47214 * (cos(0.463648) + i *sin(0.463648))

пройден

1

0

z = 1 * (cos(0) + i * sin(0))

пройден

-1

-2

z = 2.23607 * (cos(-2.03444) + i * sin(-2.03444))

пройден

0

0

no answer

пройден;

(x стоит в знаменателе и не может быть нолем)

-100

356

z = 369.778 * (cos(1.84464) + i * sin(1.84464))

пройден

1,2

5,4

  z = 5.53173 *(cos(1.35213) + i*sin(1.35213))

пройден

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

 

В условии задачи даны все нужные формулы.

Программа вычисляет r (радиус [latex]r[/latex]) и f (угол [latex]\varphi[/latex] ) и выводит их, вставляя в формулу геометрической формы комплексного числа  (которая не меняется).

Для выполнения программы и проверки тестов можно воспользоваться следующим объектом.

Решение на Java:

 

Related Images: