Advertisement
Guest User

Untitled

a guest
Nov 9th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.58 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <locale>
  4.  
  5. int main()
  6. {
  7.     setlocale(0, "Russian");
  8.     int qrMatrix[100][100]; //объявляем двумерный массив длинной 100.
  9.     int n = 0; //Переменная содержащая кол-во команд и, соответственно, элементов квадратной матрицы.
  10.     printf("Введите количество комманд: ");
  11.     do
  12.     {
  13.         scanf("%d", &n);
  14.     }
  15.     while (n < 1 || n > 100); // Просим ввести человека кол-во команд пока он не введет число в промежутке от 1 до 100
  16.  
  17.     srand(time(0)); // эта строка делает так, чтобы генератор рандомных чисел не выдавал одни и те же числа при каждом запуске.
  18.  
  19.     int sum2 = 0; // переменная для суммы очков последней команды.
  20.     for (int i = 0; i < n; i++)
  21.     {
  22.         int sum = 0; // сумма очков текущей команды
  23.         for (int j = 0; j < n; j++)             //
  24.         {                                       //
  25.             if (j > i)                          //
  26.             {                                   // В этом циклее мы заполняем очки команды рандомными числами.
  27.                 int point = rand() % 3;         // rand() % 3 - генерирует нам числа от 0 до 2.
  28.                 if (j == n - 1) sum2 += point;  // sum - содержит общее количество очков команды под номером i + 1
  29.                 sum += point;                   //
  30.                 qrMatrix[i][j] = point;         // В строке 30 и 31 мы вставляем рандомное число очков и зеркалем результат
  31.                 qrMatrix[j][i] = point;         //
  32.             }                                   // Также пока не достигнется точка, на которой мы в прошлый раз остановились, мы будем просто считать очки данной команды (i + 1)
  33.             else if (j != i)                    // Это сделано для того, чтобы посчитать очки в отзеркаленом пространстве
  34.                 sum += qrMatrix[i][j];          // Главная диагональ матрицы в конечном итоге равна не 0, а количеству баллов, которая имеет команда под номером, который имеет столбец
  35.         }                                       // и строка с пересечением.
  36.         qrMatrix[i][i] = sum;                   //
  37.     }
  38.     qrMatrix[n - 1][n - 1] = sum2;//В последний элемент диагонали записываются баллы последней команды т.к. до этого элемента наш цикл не дойдет.
  39.  
  40.     printf("\n");                           //
  41.     for (int i = 0; i < n; i++)             //
  42.     {                                       //
  43.         for (int j = 0; j < n; j++)         //
  44.         {                                   // В этих циклах выводим нашу матрицу
  45.             printf("%d ", qrMatrix[i][j]);  //
  46.         }                                   //
  47.         printf("\n");                       //
  48.     }                                       //
  49.     printf("\n");                           //
  50.  
  51.     //В цикле ниже мы выводим команды по их местам и их очки.
  52.     //Логика следующая:
  53.     for (int i = 0; i < n; i++)
  54.     {
  55.         int max = qrMatrix[i][i], curTeam = i + 1; //Получаем max элемент и текущую команду (прим.1)
  56.         for (int j = 0; j < n; j++)
  57.         {
  58.             if (qrMatrix[j][j] > max) //Если текущий элемент диагонали больше, чем выбранный нами
  59.             {
  60.                 max = qrMatrix[j][j]; // Тогда записываем этот элемент в переменную
  61.                 curTeam = j + 1; // А индекс элемента + 1 в переменную curTeam
  62.             }
  63.         }
  64.         printf("(%d) место команда №%d. Очков: %d\n", i + 1, curTeam, max); // Выводим место команды (прим. 1) с ее номером и количеством очков.
  65.         qrMatrix[curTeam - 1][curTeam - 1] = -1; //помечаем выведенную ячейку, дабы больше ее в расчет не брать.
  66.     }
  67.     //Примечание 1: Т.к. массивы индексируются с 0, то мы должны вывести i + 1, как номер команды. Иначе отсчет команд начнется с 0.
  68.  
  69.  
  70.  
  71.     system("pause"); //Выводим строку и ожидаем enter до завершения программы
  72.     return 0; //Возвращаем системе результат работы нашей программы. Стандартная строка в любой программе.
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement