Задача: Таблица футбольного чемпионата задана квадратной матрицей порядка , в которой все элементы, принадлежащие главной диагонали, равны нулю, а каждый элемент, не принадлежащий главной диагонали, равен , или (числу очков, набранных в игре: — выигрыш, — ничья, — проигрыш).
a) Найти число команд, имеющих побед больше, чем поражений.
Тесты:
Матрица | Число команд | Комментарий |
3
0 2 2 0 0 1 0 1 0 |
1 | Работает |
4
0 2 1 1 0 0 2 2 1 0 0 0 1 0 2 0 |
2 | Работает |
2
0 1 1 0 |
0 | Работает |
Объяснение переменных:
int n — число команд (размерность квадратной матрицы) double k = 0 — вспомогательная переменная для метода, описанного ниже (особенности) int m[n][n] — квадратная матрица, в которую вносится турнирная таблица. int d = 0- переменная для счёта удоволетроворяющих условию командКод: проверить на ideone.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> using namespace std; int main() { int n; double k = 0; cin >> n; int m[n][n], d = 0; for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ cin >> m[i][j]; k += m[i][j]; } if(k/(n-1) > 1){ d++; } k = 0; } cout << d; return 0; } |
Алгоритм:
- Ввод n ( cin >> n ).
- Заполнение массива m ( cin >> m[i][j] ).
- Подсчет суммы очков команды ( k += m[i][j] ).
- Если k делённое на количество игр больше 1 ( k/(n-1) [latex]\in \Re [/latex] ), d++.
- Обнуляем k. Возвращаемся к п.3, пока не будет выполнен цикл
- По завершению цикла выводим d.
Особенности:
Метод использованный для выявления команд, удовлетворяющих условию задачи, заключается в замеченной мной впоследствии изучения задачи закономерности:
Если сумма очков команды делится на количество игр и даёт 1, то это значит, что либо победы = поражениям (не подходит по условию) либо это сплошные ничьи (снова победы = проигрышам). Причем, если ответ больше 1, то и побед больше, чем поражений. Если ответ меньше 1, то побед меньше, чем поражений.
Не очень красивый способ делать целое по сути число k вещественным. Да и эта переменная должна быть локальной в цикле по i — тогда не нужна будет строчка 17.
Я понимаю, что k вещественное, чтобы правильно поделилось k/(n-1) — но если Вы уж хотите делить можно сделать (double) k/(n-1) — а еще лучше заменить условие на k>n-1.
Учитывая замечания, засчитываю работу на 9 баллов.