e-olymp 1821. Comparing Answers

Problem

In a place in Southwestern Europe, the name of which I do not wish to recall, not long ago there were $n$ cities connected by unidirectional roads, with possibly more than one road connecting a city to another one, or even to itself. As a homework assignment for your geography class, you need to calculate the number of paths of length exactly two that were between each pair of cities. However, you’ve been too busy celebrating the Spanish victory in the World Cup, so now you are copying the answers from your friend. You would like to make sure his answers are correct before handing in your homework.

Input

The input consists of several test cases, separated by single blank lines. Each test case begins with a line containing the integer $n$ $(1 \leqslant n \leqslant 1000)$. The following $n$ lines contain $n$ elements each, with element $j$ of line $i$ being the number of roads from city $i$ to city $j$ (a number between $0$ and $10$, inclusive). After that, there will be $n$ lines. Each will contain $n$ elements, with element $j$ of line $i$ being the answer from your friend for the number of length-$2$ paths from city $i$ to city $j$; it will be an integer between $0$ and $100000$ inclusive.

The test cases will finish with a line containing only the number zero (also preceded by a blank line).

Note: Large input file; use fast I/O routines.

Output

For each case, your program should output a line. The content of this line should be «YES» if your classmate’s solution to the assignment is right, and «NO» otherwise.

Tests

Input Output
1 3
2 0 1
1 0 3
1 1 0
5 1 2
5 3 1
3 0 43
2 0 1
1 0 3
1 1 0
5 1 2
5 3 2
3 0 40
YES
NO
2 5
1 2 7 8 9
4 5 8 7 3
1 0 2 5 6
1 0 0 5 4
1 7 2 5 9
33 75 55 142 170
42 54 90 157 154
14 44 23 73 95
10 30 15 53 65
45 100 85 137 1435
1 2 7 8 9
4 5 8 7 3
1 0 2 5 6
1 0 0 5 4
1 7 2 5 9
33 75 55 142 170
42 4 90 157 154
14 44 23 73 95
10 30 15 53 65
45 100 85 137 1430
YES
NO
3 1
2
21
2
40
NO
YES
4 9
1 5 7 9 10 6 3 3 6
10 2 0 5 10 4 3 3 5
7 10 4 1 4 0 4 4 2
5 4 0 1 7 0 5 3 2
7 0 6 1 7 5 2 2 2
7 4 0 1 1 8 6 6 3
0 4 9 2 1 8 0 3 7
8 7 7 3 5 0 10 8 2
1 0 5 8 8 8 3 3 1
287 178 173 129 293 196 195 180 134
182 123 203 174 287 214 150 143 144
202 143 163 158 261 150 126 128 148
125 78 153 108 182 137 82 89 109
156 141 157 108 183 149 120 120 105
166 145 166 147 192 199 157 161 147
207 159 98 105 176 141 159 149 81
243 232 270 182 300 197 184 192 201
213 152 128 61 176 142 160 147 1000
YES

Code

Solution

The problem statement says that element $j$ of line $i$ of the matrix corresponds to the number of unidirectional roads from city $i$ to city $j$. Thus, we have an adjacency matrix of a directed unweighted graph. We need to find the number of paths of fixed length $k = 2$ for each pair of cities and compare them to our friend’s answer from the output. Adjacency matrix $g_{n \times n}$ of a directed unweighted graph contains the number of routes of length $k = 1$  between each pair of vertices. The solution is iterative: adjacency matrix $g$ corresponds to paths of length $k = 1$. Let $g = d_k$. For $k + 1$ we have: $d_{k+1}[i][j] = \sum\limits_{p=1}^n d_k[i][p] \cdot g[p][j]$, i.e. the product of matrices $d_k$ and $g$. Conclusion: to count the routes of fixed length we have to raise the adjacence matrix to the correspondent power.

Testcases are processed one at a time and after each the answer is given. Firstly, two 2D arrays of size $n \times n$ are initialized and entered: one for storing the matrix with the amounts of paths and the other with our friend’s answers. There is a warning about a big input file in the problem statement. Thus we use C style for I/O operations. Secondly, the first matrix is squared and the results are compared to the friend’s answers one by one. Once an error is detected the loop ends and the answer «NO» is displayed. Otherwise the loop reaches its end and «YES» is displayed. It is necessary that both arrays are deleted before processing the next testcase to prevent memory leaks.

Links&References

Related Images:

e-olymp 6975. Магический Множитель

Задача

Ельфійські раси Середзем’я вважали, що деякі числа є більш важливими, ніж інші. При використанні конкретного кількості $n$ металу для виплавки меча, вони вважають, що меч буде найбільш потужним, якщо його товщина $k$ обрана відповідно до наступного правила:

Визнач невід’ємне ціле число $n$. Знайти найменше $k$, для якого десяткове представлення чисел в послідовності

$n, 2n, 3n, 4n, 5n,\ldots, kn$

містить всі десять цифр (від $0$ до $9$) як мінімум один раз?

Лорд Елронд з Рівенделл доручив Вам розробити алгоритм, який знайде оптимальну товщину $k$ для будь-якого заданого кількості металу $n$.

Вхідні дані

Кожен рядок містить одне число $n$ $(1 \leqslant n  \leqslant 200000000)$.

Вихідні дані

Для кожного тесту вивести в окремому рядку необхідне значення $k$ — таке що кожна цифра від $0$ до $9$ зустрічається хоча б один раз.

Тести

Вхідні дані Вихідні дані
1 1

10

123456789

3141592

10

9

3

5

2 200000000 45

Код

Рішення

Для знаходження числа $k$ треба всі отриманні цифри (від $0$ до $9$), які зустрічаються в числовій послідовності $n, 2n, 3n, 4n, 5n,\ldots, kn$, відзначати як знайдені. Для цього було використано масив з $10$ елементів, де поіндексово (відповідно до цифри) відзначалася знайденна цифра, яка зустрічалося в числовій послідовності хоча б один раз. Пошук числа $k$ здійнувався за допомогою циклу, де методом поступового збільшення $k$, здійснювалася перевірка числа. Перевірка рахувалося успішною і завершувала цикл, якщо в масиві було відзначено всі цифри. В разі неуспішної перевірки цикл продовжувався.

Посилання

  • Задача на e-olymp.
  • Код рішення на Replit.
  • Код рішення на Ideone.

Related Images:

e-olymp 1290. Номерной знак

Задача

Международный номерной регистрационный знак легкового автомобиля состоит из $A$ арабских цифр и $B$ больших букв латинского алфавита. Будем считать, что для обеспечения уникальности номера разрешено использовать любую последовательность букв и цифр.

Сколько существует различных таких номеров?

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

В единственной строке через пробел $2$ неотрицательных целых числа $B$ и $A$. Оба числа не превышают $26$.

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

Единственное число — ответ к задаче.

Тесты

Входные данные Выходные данные
1 3 3 17576000
2 2 5 67600000
3 7 1 80318101760
4 1 1 260
5 26 26 615611958020715731079667428840020377600000000000000000000000000

Код

Решение

Начнем с того, что к условию задачи прилагается картинка, на которой видно, что во всех номерных знаках буквы и цифры не перемешаны между собой произвольно, а имеют свои четко распределенные места, в примере это последовательность, в которой на первой позиции стоит буква, далее три цифры и на последних двух позициях снова буквы. Это важный момент, поскольку если бы действительно было разрешено использовать любую последовательность, возможных комбинаций было бы гораздо больше. Поскольку в латинском алфавите $26$ букв, для выбора буквы на первое место существует $26$ возможных вариантов, на второе тоже $26$, как и на третье, четвертое и т. д. То есть для того чтобы найти все комбинации из букв для $B$ мест, нужно умножить $26$ на $26$ $B$ раз. Точно так же это работает с арабскими цифрами. Их всего $10$, соответственно, умножаем $10$ на $10$ $A$ раз, где $A$ — количество мест в номерном знаке для цифр. Поэтому, чтобы найти количество возможных комбинаций букв и цифр, перемножаем полученные результаты. Отсюда получаем формулу $26^B\cdot 10^A$.

Сложность задачи заключается скорее не в формуле вычисления, а в реализации кода, поскольку большинство значений уже на этапе возведения в степень не помещаются даже в самые большие типы данных. Именно поэтому код состоит не из пяти строк и встроенной операции возведения в степень, а из более сложных операций, подходящих для работы с большими числами. По сути, у нас возникает проблема, связанная с перемножением больших чисел, которые не помещаются в стандартные типы данных С++. Для решения этой проблемы я выбрала модель представления, в которой числа записываются в виде массивов в десятичной системе, и каждая цифра числа является элементом массива. Младший разряд числа находится в нулевом элементе массива, а старший в $n-1$-ом соответственно. Далее была реализована функция «MULT», которая фактически осуществляет алгоритм умножения поэлементно с сохранением остатка от деления на $10$ в соответствующем элементе массива и добавлением частного от деления на $10$ к следующему элементу массива. Следует отметить, что данная функция принимает два числа, записанные в выше указанной модели представления (в виде массивов), и характеристиками этих чисел является пара: сам массив и количество разрядов в числе (размер массивов иными словами). На выходе функция возвращает количество разрядов полученного произведения. Сам же результат умножения сохраняется в виде массива, который является одним из параметров функции. В коде данная функция внесена в цикл для многократного перемножения чисел, то есть для возведения в нужную степень. Домножение на $10^A$ осуществляется в последнем цикле приписыванием A нулей к полученному результату.

Ссылки

Задача на сайте e-olymp
Код решения на ideone

Related Images:

e-olymp 8254. Номера отеля

Задача

Отель имеет $n$ этажей. Лобби, ресторан и тренажерный зал расположены на первом этаже. Номера находятся со 2-го по $n$-ый этажи. На каждом этаже расположено $m$ стандартных номеров. Если каждый стандартный номер вмещает 3 гостя, какое наибольшее количество гостей может поместиться во всех стандартных номерах отеля?

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

Два натуральных числа $n$ и $m$ ($n, m\leqslant10^6$).

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

Вывести наибольшее количество гостей, которое может поместиться во всех стандартных номерах отеля.

Тесты

Входные данные Выходные данные
1 5 10 120
2 3 1 6
3 2 5 15
4 7 2 36
5 20001 450000 270000000000

Код

Решение

Для решения данной задачи выводим формулу $(n-1) \cdot m \cdot 3$, первый из сомножителей — количество этажей, на которых располагаются номера, второй — количество номеров на каждом из указанных этажей, третий — максимальное количество гостей в каждом номере. Заметим, что по условию на первом этаже номера отсутствуют, поэтому первый сомножитель в формуле будет на единицу меньше, чем количество этажей в отеле.

Ссылки

Задача на сайте e-olymp
Код решения на ideone

Related Images:

e-olymp 913. Используй подпрограмму

Задача

Вычислить сумму и произведение $n$ пар заданных вещественных чисел, воспользовавшись подпрограммой $SumDob$ для вычисления суммы и произведения двух вещественных чисел.

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

В первой строке задано натуральное число $n$ — количество пар чисел. В последующих $n$ строках через пробел задано по $2$ вещественных числа. Все входные данные по модулю не превышают $100$.

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

В $n$ строках вывести через пробел по два числа: сначала сумму, а потом произведение очередной пары чисел. Результат выводить с точностью $4$ знака после десятичной точки.

Тесты

# Входные данные Выходные данные
1 2
6 7.5
2.1 2.0
13.5000 45.0000
4.1000 4.2000
2 4
2 5
3 5
4 5
5 5
7.0000 10.0000
8.0000 15.0000
9.0000 20.0000
10.0000 25.0000
3 2
100 100
56 65
200.0000 10000.0000
121.0000 3640.0000
4 6
10 10
20 20
40 40
50 50
70 70
80 80
20.0000 100.0000
40.0000 400.0000
80.0000 1600.0000
100.0000 2500.0000
140.0000 4900.0000
160.0000 6400.0000
5 1
2 2
4 4

Решение

Как и было указано в условии задачи, при решении задачи использовалась подпрограмма $SumDob$, которая возвращает сумму и произведение двух вещественных чисел $a$ и $b$. Потом мы с помощью цикла выводим пару чисел, полученных из подпрограммы $SumDob$ $n$ раз с $n$ пар введенных значений.

Условие задачи можно найти на e-olymp
Код решения — ideone

Related Images:

e-olymp 8653. Прибавить вычесть и умножить

Задача

Пусть x — переменная, изначально равная 0. Промоделируйте выполнение следующих операций над ней:

  • add a: прибавить значение a к x;
  • subtract a: вычесть значение a из x;
  • multiply a: умножить x на a;

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

Каждая строка содержит операцию и значение. Промоделируйте все операции. Значение переменной x при выполнении каждой операции не превышает по модулю $10^9$.

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

Выведите результирующее значение переменной x.

Тесты

Ввод Вывод
1 add 2
subtract 5
subtract 1
multiply -3
12
2 subtract 5
multiply -5
add 5
30
3 add 6
add 543
multiply 23
12627
4 multiply 45678
add 3
3
5 subtract 58
add 38
multiply -1
add 100
120

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

Решение задачи

Инициализировав основную переменную x, через поток ввода считываем все действия, которые неоходимо применить по отношению к переменной. Во время этого ничего не выводим, дожидаясь, пока поток команд закончится. Заметим, что процесс ввода может длиться сколько угодно долго. В конце концов, на выходе получаем уже «преобразованный» x — результат проделанных дейсвтий.

Ссылки

Related Images:

e-olymp 1482. Умножение матриц

Задача

Пусть даны две прямоугольные матрицы $A$ и $B$ размерности $m \times n$ и $n \times q$ соответственно:
$$A = \begin{bmatrix} a_{11} & a_{12} & \ldots & a_{1n} \\ a_{21} & a_{22} & \ldots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \ldots & a_{mn} \end{bmatrix} \; , \; B = \begin{bmatrix} b_{11} & b_{12} & \ldots & b_{1q} \\ b_{21} & b_{22} & \ldots & b_{2q} \\ \vdots & \vdots & \ddots & \vdots \\ b_{n1} & b_{n2} & \ldots & b_{nq} \end{bmatrix} .$$
Тогда матрица $C$ размерностью $m \times q$ называется их произведением:
$$C = \begin{bmatrix} c_{11} & c_{12} & \ldots & c_{1q} \\ c_{21} & c_{22} & \ldots & c_{2q} \\ \vdots & \vdots & \ddots & \vdots \\ c_{m1} & c_{m2} & \ldots & c_{mq} \end{bmatrix} ,$$
где: $$c_{i,j} = \sum_{r=1}^{n} a_{i,r}b_{r,j} \; \left(i = 1, 2, \ldots m; j = 1, 2, \ldots q\right).$$
Операция умножения двух матриц выполнима только в том случае, если число столбцов в первом сомножителе равно числу строк во втором; в этом случае говорят, что форма матриц согласована.

Задано две матрицы $A$ и $B$. Найти их произведение.

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

В первой строке задано $2$ натуральных числа $n_a$ и $m_a$ – размерность матрицы $A$. В последующих $n_a$ строках задано по $m_a$ чисел – элементы $a_{ij}$ матрицы $A$. В $\left(n_a + 2\right)$-й строке задано $2$ натуральных числа $n_b$ и $m_b$ – размерность матрицы $B$. В последующих $n_b$ строках задано по $m_b$ чисел – элементы $b_{ij}$ матрицы $B$. Размерность матриц не превышает $100 \times 100$, все элементы матриц целые числа, не превышающие по модулю $100$.

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

В первой строке вывести размерность итоговой матрицы $C$: $n_с$ и $m_c$. В последующих $n_с$ строках вывести через пробел по $m_c$ чисел – соответствующие элементы $c_{ij}$ матрицы $C$. Если умножать матрицы нельзя — в первой и единственной строке вывести число $\; -1$.

Тесты

Входные данные Выходные данные
2 3
1 3 4
5 -2 3
3 3
1 3 2
2 1 3
0 -1 1
2 3
7 2 15
1 10 7
3 3
1 5 3
2 6 1
7 -1 -3
3 2
3 6
-1 1
3 1
3 2
7 14
3 19
13 38
4 4
4 8 -18 16
3 7 14 -42
2 1 1 7
4 9 5 -2
4 4
1 0 0 0
0 1 0 0
0 0 1 0
4 4
4 8 -18 16
3 7 14 -42
2 1 1 7
4 9 5 -2
3 3
5 7 -1
8 9 3
0 -6 17
2 3
7 -15 1
8 8 2
-1
2 3
57 -49 31
89 11 -37
3 1
19
-19
0
2 1
2014
1482

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

 

Решение

Для начала, считываем данные матрицы $A$ из входного потока и записываем их в двумерный динамический массив. Далее, получив данные о размерности второй матрицы, мы можем определить, выполнима ли операция умножения, и если нет, то прервать выполнение программы. Если операция умножения данных матриц выполнима, то считываем и записываем данные второй матрицы, после чего, по приведённой выше формуле вычисляем произведение матриц $C = A \times B.$ Наконец, выводим полученную матрицу $C.$

Ссылки

Условие задачи на e-olymp
Код задачи на ideone
Умножение матриц на Wikipedia

Related Images:

A278

Задача A278

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

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

 

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

Входные данные Выходные данные
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

Реализация (класс vector)

Алгоритм решения (класс vector)

Считываем все натуральные числа до конца входного потока и записываем их в вектор [latex]n[/latex]. Аналогично, считываем все действительные числа до конца входного потока и записываем их в вектор [latex]x[/latex].

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

Реализация (потоковая обработка)

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

Считываем все натуральные числа до конца входного потока и записываем их в переменную member1. Аналогично, считываем все действительные числа до конца входного потока и записываем их в переменную  member2.
Пока вводятся данные:

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

Для запроса на выполнение следует перейти по ссылке (класс vector).

Для запроса на выполнение следует перейти по ссылке (потоковая обработка).

Related Images:

e-olymp 931. Отношение произведения к сумме

Задача

Вычислить отношение произведения цифр натурального числа к их сумме.

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

Натуральное число [latex]n[/latex], не превышающее 2·109.

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

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

Решение

Для решения поставленной задачи нам нужно выделить отдельные цифры в записи данного числа, чтобы сосчитать их произведение и сумму. Для этого прочитаем это число из входного потока данных и реализуем разбиение числа на цифры с помощью цикла while.  Благодаря остатку от деления числа на 10 получаем последнюю цифру текущего числа, затем делим это число на 10. Если полученное число не 0, повторяем все действия, постепенно накапливая произведение и сумму. Найденные значения произведения и суммы цифр данного числа разделим, предварительно воспользовавшись явным преобразованием к типу double. Это и будет ответом, но так как в задаче указано вывести ответ с тремя десятичными цифрами, я использовала функцию <code>setprecision(3)</code>. В итоге получаем решение этой задачи.

Код

 

Тесты

Входные данные Выходные данные
36 2.000
3456 20.000
1645 7.500

Задача взята отсюда.

Код программы на Ideone.com.

Related Images:

ML 1

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

Даны два действительных числа [latex]a[/latex] и [latex]b[/latex]. Получить их сумму,  разность и произведение.

Код №1

Тесты

a z b sum
5 + 6 11
7 8 -1
9 * 11 99

 

Решение №1

Для создания данной программы я описал 4 переменных: [latex]a[/latex], [latex]b[/latex], [latex]z[/latex],  sum.  Для переменных [latex]a[/latex],  [latex]b[/latex],  [latex]sum[/latex] я взял тип переменных «long double» — так как не указано какие числа должны быть. Символом z мы обозначим переменную в  типе «char» —  так как мне надо указать знак операции. Для вычисления суммы надо ввести знак операции «+»,  для разности «-» и для произведения  «*»  выглядит все примерно так мы вводим (первое число «[latex]a[/latex]») (знак «[latex]z[/latex]» ) (второе число «[latex]b[/latex]») и получаем (ответ «[latex]sum[/latex]»).

 

Код №2

 

Решение №2

Это не то, что просили сделать изначально,  но я думаю это тоже будет интересно.

Отличие от первого кода состоит в том, что я добавил дополнительные команды,  а именно:  деления «/»,  возведения в степень «^»  и остаток от деления «%».

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

Ссылки

Условие задачи;
Код программы №1 на Ideone.com;
Код программы №2 на Ideone.com;

Related Images:

A116г

Даны натуральное число [latex]n[/latex] и действительное число [latex]x[/latex]. Вычислить:

[latex]\prod_{k=1}^{n}(1+\frac{sin(kx)}{k!})[/latex]

Вводим переменную [latex]x[/latex] и [latex]n[/latex], помимо них введем переменную для вычисления факториала [latex]k[/latex] и ту, которая будет вычислять произведение в цикле.

Создаем цикл по [latex]k[/latex] от 1 до [latex]n[/latex], проводим в нем все вычисления и вне цикла выводим результат.

Тесты:

[latex]n[/latex] [latex]x[/latex] Результат:
2 5.89 0.39856
9 -300.001 1.65069
3 199 0.170071
7 0 1
4 -50 1.8349
Ссылка на код.

Related Images:

А136е

Задача:

Даны натуральные числа [latex]n[/latex], действительные числа [latex]a_{1}, a_{2}, \cdots, a_{n}[/latex]. Вычислить [latex]a_{1}+a_{2}+\cdots+a_{n}[/latex] и [latex]a_{1}a_{2}\cdots a_{n}[/latex].

Тест:

n [latex]a_{1}, a_{2}, \cdots, a_{n}[/latex] s p Комментарий
2 3 4 7 12 Пройден
4 1 3 5 7 16 105 Пройден
6 2 2 3 3 4 4 18 576 Пройден
1 9 9 9 Пройден
Решение:

В программе задаем число [latex]n[/latex]- количество элементов сумм и произведения и [latex]a[/latex]- элементы сумм и произведения.  [latex]n[/latex] и [latex]a[/latex] вводим с клавиатуры. В цикле находим сумму и произведение.

Посмотреть работу можно тут.

Related Images:

А410д

Задача:

Дана целочисленная матрица [latex][a_{ij}, i, j =1, … n][/latex]. Получить [latex]b_1, …, b_n[/latex], где [latex]b_i=\prod_ja_{ji}[/latex] для все таких [latex]j[/latex], что  [latex]1 < a_{ji} <= n[/latex];

Тесты:

[latex]ixj[/latex] a_{ij} [latex]b_1, …, b_n[/latex] Комментарий
3×3 [latex]\begin{pmatrix}1 & 2 & 1 \\ 2 & 1 & 2 \\ 2 & 2 & 1\end{pmatrix}[/latex]  4, 4, 2 Пройден
4×3 [latex]\begin{pmatrix}2 & 4 & 8 \\3 & 1 & 5 \\6 & 7 & 8\\1 & 4 & 1\end{pmatrix}[/latex]  6, 4, * Пройден
2×3 [latex]\begin{pmatrix}2 & 4 & 3\\ 4 & 2 & 3\end{pmatrix}[/latex]  2, 2, * Пройден

Код:

Для начала  вводим размерность массива [latex]a[/latex]. Затем с помощью цикла [latex]for[/latex] заполняем этот массив.

Теперь каждому элементу массива [latex]b[/latex] задаем значение [latex]1[/latex]. Находим произведение таких элементов матрицы [latex]a_{ji}[/latex], которе бы удовлетворяли условию задачи, а именно для все таких [latex]j[/latex], что  [latex]1 < a_{ji} <= n[/latex]. В итоге если в массиве  [latex]b[/latex] остается элемент с значением  [latex]1[/latex], выводим символ  [latex]*[/latex], так как нельзя найти произведение. Выводим значения массива  [latex]b[/latex].

Код Java

Ссылка на Ideone

Related Images:

A114з

Задача:

Вычислить [latex]\prod_{i=2}^{10}{\left(1-\frac{1}{i!} \right)^{2}}[/latex].

Тест:

[latex]\prod_{i=2}^{10}{\left(1-\frac{1}{i!} \right)^{2}}=0,1563[/latex]- тест пройден.
Решение:

Для решения это задачи сделаем цикл. в котором будем вычислять произведение и факториал. Факториал будем вычислять применяя рекуррентные соотношения. Затем подставим факториал в формулу и вычислим произведение.

Посмотреть работу программы можно здесь.

Related Images:

А136л

Задача: Даны натуральное число [latex]n[/latex], действительные числа [latex]a_{1},\cdot \cdot \cdot ,a_{n}[/latex]. Вычислить: [latex]\sqrt{\left|a_{1}a_{2}\cdot \cdot \cdot a_{n} \right|}[/latex].

[latex]n[/latex] [latex]a_{1}[/latex] [latex]a_{2}[/latex] [latex]a_{3}[/latex] [latex]a_{4}[/latex] [latex]a_{5}[/latex] [latex]a_{6}[/latex] [latex]a_{7}[/latex] [latex]a_{8}[/latex] [latex]k[/latex]
4 -5 2 4 -3.6 12
8 -5 0.2 -3.2 0.5 -1.25 20 2 80 80
3 4 4 0 0
5 3 8 6 2.8 1.3 22.894541

С++:

Java:

Объявляем переменную [latex]n[/latex] (количество элементов — это целое число, поэтому используем тип int) и переменные a (элементы произведения), p (произведение), k (корень из модуля произведения элементов), они могут быть вещественными, поэтому выбираем тип double.

В цикле for считываются элементы [latex]a_{1},a_{2},\cdot \cdot \cdot ,a_{n}[/latex], где [latex]i[/latex] — индекс элемента, и вычисляется их произведение.

После цикла вычисляется корень из модуля произведений элементов.

Задача на Ideone:
C++
Java

Related Images:

А116д

Задача:

Даны натуральное число [latex]n[/latex], действительное число [latex]x[/latex]. Найти:

[latex]\prod_{k=1}^{n}(\frac{k}{k+1}-cos^k|x|)[/latex]

Тесты:

[latex]x[/latex] [latex]n[/latex] [latex]p[/latex] Комментарий
1 4 0.0212016 Пройден
-4 3 -0.0779913 Пройден
50 16 0.0782772 Пройден

Код:

Для решения данной задачи создаем цикл, счетчик [latex]k[/latex] которого не превышает заданного [latex]n[/latex].  В самом цикле вычисляем произведение [latex]p[/latex] путем домножения новых  множителей заданных формулой  [latex]\frac{k}{k+1}-cos^k|x|[/latex]  пока [latex]k[/latex] не превысит [latex]n[/latex]. Выводим произведение [latex]p [/latex].

Ссылка Ideone

Код Java

Ссылка на Ideone

Related Images:

А59з

Задача. Даны действительные числа [latex]x, y[/latex]. Определить, принадлежит ли точка с координатам [latex]x, y[/latex] заштрихованной части плоскости (рис. ниже).

ыфв

Объявляем две переменные [latex]x,y[/latex] типа [latex]double[/latex] (точки могут иметь дробные координаты). Читаем координаты точки. В условии проверяем три пункта:

  1. Лежит ли [latex]y[/latex] выше [latex]-2[/latex] [latex](y>=-2)[/latex].
  2. Находится ли точка между двумя прямыми [latex](|x|<=1)[/latex].
  3. Лежит ли точка ниже диагоналей,описанных функцией [latex]y=|x|[/latex].

Если все эти три условия соблюдены, то точка находится в закрашенной области, иначе вне этой области.

Реализация на Java:

 

 

Related Images:

А165б

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

Тесты:

Последовательность [latex]{a}_{1}{a}_{2}\dots{a}_{n}[/latex] Комментарий
1 2 3 4 -1 2 24 Пройден
0.5 0.4 0.3 0.2 0.1 -0.1 -0.2 -0.3 0.0012 Пройден
1.5 -1 50 1.5 Пройден
1 2 3 4 3 2 1 0 -1 0 Пройден

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

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

Идея решения:
Считывать числа с потока ввода. Если считанное число отрицательное, остановится и вывести накопленное произведение на экран. Иначе умножить произведение на очередное число.

Related Images:

Ю3.36

Задача

Численно убедиться в справедливости равенства, для чего для заданного значения аргумента [latex]x[/latex] вычислить левую его часть и разложение, стоящее в правой части, с заданной погрешностью [latex]\varepsilon[/latex]. Испытать разложение на сходимость при разных значениях аргумента, оценить скорость сходимости, для чего вывести число итераций [latex]n[/latex] (слагаемых или сомножителей), необходимых для достижения заданной точности.

[latex]\frac { { e }^{ x }+{ e }^{ -x } }{ 2 } =1+\frac { { x }^{ 2 } }{ 2! } +\frac { { x }^{ 4 } }{ 4! } +\cdots+\frac { { x }^{ 2n } }{ (2n)! } +\cdots[/latex]

Тесты

   x [latex]\varepsilon[/latex] Левая часть Правая часть    n Разность Комментарий
3 0.00005 10.0676619958  10.0676598764 8 0.0000021194 Пройден
 11.33  0.0000314 41641.5114284855 41641.5114045419 19 0.0000239436 Пройден
 6 0 Погрешность равна 0, тогда правая часть стремится к левой 201.7156361225 (n=бесконечность)​  Не пройден

Код программы на C++:

В данной задаче необходимо было доказать равенство при заданном [latex]x[/latex] и [latex]\varepsilon [/latex].

Для этого вначале высчитывалось значение левой части [latex]\frac { { e }^{ x }+{ e }^{ -x } }{ 2 } [/latex] при заданном [latex]x[/latex], а далее, в цикле, высчитывалось значение правой части [latex]\frac { { x }^{ 2 } }{ 2! } +\frac { { x }^{ 4 } }{ 4! } +…+\frac { { x }^{ 2n } }{ (2n)! } +…[/latex]. В цикле программа находила последующий элемент последовательности, стоящей в правой части равенства, каждый раз умножая предыдущий элемент на [latex]\frac { { x }^{ 2 } }{ (2n-1)*(2n) } [/latex] до тех пор пока разность между левой и правой частью равенства [latex]dife=left-right[/latex]  не стала меньше заданной погрешности, заданной по модулю [latex]dife < \left|\varepsilon \right|[/latex]. После завершения цикла программа запоминает последнее значение [latex]n[/latex] и после этого выводит его на экран.

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

 

Related Images:

А114е

Задача. Вычислить [latex]\prod_{i=1}^{10}{(2+\frac{1}{i!})}.[/latex]

По условию [latex]i[/latex] у нас изменяется от [1; 10], но, чтобы полностью убедиться, что программа правильно работает, изменим интервал, на котором изменяется[latex]i[/latex], к примеру [1; n].

Тест

i f p (wolframalpha)
1 1 3
2 2 7.5
3 6 16.25
4 24 33.17708
5 120 66.630635
6 720 133.3538125486111
7 5040 266.7340841820129 
8 40320 533.4747839927034
9 362880 1066.951038098899
10 3628800 2133.902370220902

Код программы на языке С++ :

Ссылка на код программы: http://ideone.com/DEEFJd
Решение задачи сводится к нахождению произведения [latex]p[/latex]. Присваиваем [latex]p = 1[/latex], [latex]f = 1[/latex]. Далее фиксируем значение [latex]i[/latex]:

Анализируем, [latex]f [/latex] увеличивается в зависимости от [latex]i[/latex], следовательно:

Следующим шагом будет вычисление искомого произведения — каждый последующий член вычисляем и умножаем на предыдущий:

Получаем ответ.

Код программы на языке Java:

Ссылка на программу: http://ideone.com/JzB87V

Related Images: