Advertisement
qberik

Untitled

Oct 28th, 2021
1,189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.90 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. #define SIZE 100
  6.  
  7. int main(){
  8.  
  9.   int A[SIZE][SIZE] = {};
  10.  
  11.   int sum = 0;
  12.   int N = 0;
  13.   int M = 0;
  14.   int max = 0;
  15.   bool flag = 0;
  16.   int ans = 0;
  17.   int max_i = 0;
  18.   int elem = 0;
  19.   int elem_i[SIZE] = {};
  20.   int elem_j[SIZE] = {};
  21.   int elem_count = 0;
  22.  
  23.   std::cout << "Введите количество строк матрицы" << std::endl;
  24.   std::cin >> N;
  25.   std::cout << "Введите количество столбцов матрицы" << std::endl;
  26.   std::cin >> M;
  27.  
  28.   std::cout << "Введите матрицу" << std::endl;
  29.   for( int i = 0; i < N; i++ )
  30.     for( int j = 0; j < M; j++ )
  31.       std::cin >> A[i][j];
  32.  
  33.  
  34.  
  35.   //Здесь мы проходимся по столбцам и ищем всех, кто по 1-му условию подозит
  36.   for( int j = 0; j < M; j++ ){
  37.     max = A[0][j];
  38.     max_i = 0;
  39.     // Ну для начала он дожен быть максимальным в столбце здесь я это проверяю
  40.     for( int i = 0; i < N; i++ ){
  41.       if ( A[i][j] > max ){
  42.         max = A[i][j];
  43.         max_i = i; // cохраним его место
  44.       }
  45.     }
  46.     // Считаем сумму столбца
  47.     sum = 0;
  48.     for( int i = 0; i < N; i++ ){
  49.       sum += A[i][j];
  50.     }
  51.     sum -= max; // Вычитаем наш максимальный элемент получается сумма остальных
  52.  
  53.     if( max > sum ){ // Если 1-е условие выполняется
  54.       elem_i[elem_count] = max_i; // запоминаем координаты
  55.       elem_j[elem_count] = j;
  56.       elem_count += 1; // Количество + 1
  57.     }
  58.  
  59.   }
  60.  
  61.   // Ну теперь давай проверять 2-е условие
  62.  
  63.   for( int i = 0; i < elem_count; i++ ){
  64.  
  65.     flag = true;
  66.     int elem = A[elem_i[i]][elem_j[i]]; // берём элеметн по индексу
  67.     for( int j = 0; j < elem_j[i]; j ++ )
  68.       if ( A[elem_i[i]][j] >= elem ) // Проверяем всех кто слева
  69.         flag = false; // Если оказался >= то сбрасываем флажок
  70.  
  71.     for( int j = elem_j[i]+1; j < M; j++ ) // Проверяем всех кто справа
  72.       if ( A[elem_i[i]][j] <= elem ) // Проверяем всех кто слева
  73.         flag = false; // Наоборот, если оказался <= то сбрасываем флажок
  74.  
  75.     if ( flag ) // Если флажок не сброженный
  76.       ans ++; // то елемент прошёл 2 условия, количество + 1
  77.  
  78.     //std::cout << elem_i[i] << ' ' << elem_j[i] << ' ' << A[elem_i[i]][elem_j[i]] << ' ' << flag <<  std::endl; // это вывод координат значений и флагов тупа для теста
  79.  
  80.   }
  81.  
  82.   std::cout << "Особых элементов " << ans << std::endl;
  83.  
  84.  
  85.   return 0;
  86. }
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement