Олимпиада по программированию
На АСМ-олимпиаду прибыло [latex]N[/latex] участников. В результате анкетированные члены жури установили, что [latex]A[/latex] участников программируют на Cи, [latex]B[/latex] на Python, [latex]C[/latex] на Pascal, [latex]X[/latex] одновременно знают Cи и Python, [latex]Y[/latex] — Python и Pascal, [latex]Z[/latex] — Cи и Pascal. Имея значения [latex]N, A, B, C, X, Y, Z[/latex] установите количество участников, которые программируют на трёх языках программирования.
Входные данные
В одной строке через пробел сем действительных чисел [latex]N, A, B, C, X, Y, Z[/latex] значения которых не превышают [latex]100[/latex].
Выходные данные
Единственное число – количество участников, которые программируют на трёх языках программирования.
Тесты
# | ВХОДНЫЕ ДАННЫЕ | ВЫХОДНЫЕ ДАННЫЕ |
---|---|---|
1 | 100 40 50 60 15 20 25 | 10 |
2 | 100 50 60 60 20 40 25 | 15 |
3 | 80 50 40 60 20 30 25 | 5 |
4 | 80 50 40 60 0 0 0 | 0 |
5 | 40 20 30 0 5 0 10 | 5 |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> using namespace std; int main() { int n, a, b, c, x, y, z; cin >> n >> a >> b >> c >> x >> y >> z; if (x + y + z == 0) { cout << 0; } else { cout << (x + y + z) - (a + b + c - n); } return 0; } |
Решение задачи:
Алгоритм решения данной задачи состоит в том, чтоб найти разность между числом участников, что одновременно знают по два языка $(X + Y + Z)$, и числом, что показывает на сколько языков больше чем людей (разностью между общим количеством языков и участников) $(A + B + C — N)$. Тем самым, мы найдем количество людей, которые знают одновременно 3 языка. Его также можно объяснить используя диаграмму Эйлера-Венна, на которой отмечено семь областей. Из условия следует, что:
$\begin {cases} x_1 &+ &x_2 &+ &x_3 &+ &x_4 &+ &x_5 &+ &x_6 &+ &x_7 &=N \newline x_1 &+ & & & &&x_4 &+ & & &x_6 &+ &x_7 &=A \newline & & &&x_3 &+ &x_4 &+ &x_5 &+ & & &x_7 &=B\newline & &x_2 &+ & & & & &x_5 &+ &x_6 &+ &x_7 &=C \newline & & &&& &x_4 && && &+ &x_7 &=X \newline & & & & && & &x_5 & & &+ &x_7 &=Y \newline & & & & & & & & & &x_6 &+ &x_7 &=Z \end{cases}$
Нам нужно найти количество участников в [latex]x_7[/latex] области (области одновременного пересечения всех трех кругов). И получается, что:
$(X + Y + Z)-(A + B + C — N)=x_7$
Если же после ввода данных, окажется, что количество людей знающих два языка равно нулю $(X + Y + Z == 0)$, то программа выведет, что людей знающих одновременно три языка также нет.
Сделайте правильные отступы в коде программы.
В описании решения задачи не хватает запятых.
Ошибки исправил, отступы сделал, алгоритм решения описал. Сейчас должно быть все нормально. Также я давно зарегистрировался на gravatar.com. Могли бы вы мне, пожалуйста, поставить за это дополнительные баллы ?
Да, добавил баллы за аватарку. А Вы тогда тогда определитесь будете судить или журить 🙂
Надеюсь, 8-мартовское настроение не помешает мне правильно оценить работу 🙂
Это я так намекаю, что вы решаете задачу темпами соизмеримыми со строительством высотного дома у меня по соседству.
— «их возможным количеством»? Может «количеством участников»?
— Писать ««7» области» неправильно. Нужно ввести обозначение с индексом. Например, так: обозначим через $n_i$ количество участников в $i-$й области на рисунке. Тогда получим: $\sum\limits_{i=1}^{7}n_i = n,$ $n_1+n_4+n_6+n_7=A$ и т.д.
Или можно записать в виде системы линейных алгебраических уравнений:$$\left \{ \begin {matrix}
x_1 &+ &x_2 &+ &x_3 &+ &x_4 &+ &x_5 &+ &x_6 &+ &x_7 &=n \\
x_1 &+ & & & &&x_4 &+ & & &x_6 &+ &x_7 &=A \\
& & &&x_3 &+ &x_4 &+ &x_5 &+ & & &x_7 &=B\\
& &x_2 &+ & & & & &x_5 &+ &x_6 &+ &x_7 &=C \\
x_1 &+ & & &x_3 &+ &x_4 &+ &x_5 &+ &x_6 &+ &x_7 &=X \\
& &x_2 &+ &x_3 &+ &x_4 &+ &x_5 &+ &x_6 &+ &x_7 &=Y \\
x_1 &+ &x_2 &+ & & &x_4 &+ &x_5 &+ &x_6 &+ &x_7 &=Z
\end{matrix} \right.
$$
— Если Вы видите, что формула слишком длинная и не отображается правильно, разбейте её на несколько.
— Личная просьба. Не используйте слово «разница» вместо «разность». Это не ошибка и вполне понятно. Но в математическом контексте режет слух.