Wow_Rasl

Untitled

Dec 18th, 2021
982
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.29 KB | None | 0 0
  1. // подключаем нужные нам библиотеки
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <locale.h>
  5. using namespace std;
  6.  
  7. int **a; // исходный массив
  8. int n, m;
  9. int *sz; // массив размеров каждой из строк двумерного массива a
  10. // этот массив необходим, ведь в процессе удаления элементов a
  11. // перестает быть прямоугольной матрицей
  12. void create(int ***pa, int *pn, int* pm){ // создание массива
  13.     printf("n = ");
  14.     scanf("%d", &n);
  15.     printf("m = ");
  16.     scanf("%d", &m);
  17.     sz = (int*)malloc(n*sizeof(int));
  18.     a = (int**) malloc(n * sizeof(int*));
  19.     for (int i = 0; i < n; i++) {
  20.         a[i] = (int*) malloc(m * sizeof(int));
  21.     }
  22.     for(int i=0;i<n;++i){
  23.         sz[i] = m;
  24.         for(int j=0;j<m;++j){
  25.             scanf("%d", &a[i][j]);
  26.         }
  27.     }
  28.     *pa = a; // присваиваем указатель на начало массива
  29.     *pn = n; // присваиваем указатель на a.size(по строкам)
  30.     *pm = m; // присваиваем указатель на a.size(по столбцам)
  31. }
  32.  
  33. void printArr(int **a){ // вывод
  34.     printf("текущий массив = \n");
  35.     for(int i = 0; i < n; ++i){
  36.         for(int j = 0;j < sz[i]; ++j){
  37.             printf(" %d", a[i][j]);
  38.         }
  39.         printf("\n");
  40.     }
  41. }
  42.  
  43. void del_element(int ***pa, int **psz, int *pn, int ind_i, int ind_j){ //  функция удаления элемента
  44.     if(ind_i>=n || ind_j>=sz[ind_i]){
  45.         printf("error\n");
  46.     }else if(sz[ind_i]==1){ //если перед удалением в строке всего 1 элемент, то количество строк умненьшается на 1
  47.         --n;
  48.         for(int i=ind_i;i<n;++i){
  49.             a[i]=a[i+1];
  50.             sz[i] = sz[i+1];
  51.         }
  52.         a = (int**)realloc(a, n * sizeof (int*));
  53.         sz = (int*)realloc(sz, n * sizeof (int));
  54.     }else{
  55.         --sz[ind_i];
  56.         for(int j = ind_j; j < sz[ind_i]; ++j){
  57.             a[ind_i][j] = a[ind_i][j + 1];
  58.         }
  59.         a[ind_i] = (int*)realloc(a[ind_i], sz[ind_i] * sizeof(int));
  60.     }
  61.     *pa = a;
  62.     *pn = n;
  63.     *psz = sz;
  64. }
  65.  
  66. int sum(int **a, int column){
  67.     int sum =0;
  68.     for(int i=0;i<n;++i){
  69.         sum+=a[i][column];
  70.     }
  71.     return sum;
  72. }
  73.  
  74. int maxsum(int **a){
  75.     int mx = 0;
  76.     for(int i=0;i<n;++i){
  77.         mx+=a[i][0];
  78.     }
  79.     for(int i=0;i<m;++i){
  80.         int cur = sum(a,i);
  81.         if(cur>mx){
  82.             mx = cur;
  83.         }
  84.     }
  85.     return mx;
  86. }
  87.  
  88.  
  89. void del_column(int **a, int *pm, int ind_j){ // удаление строки
  90.     for(int i = 0;i<n;++i){
  91.         del_element(&a,&sz,&n,i, ind_j);
  92.     }
  93.     --m;
  94.     *pm = m;
  95. }
  96.  
  97. void modif(int **a){
  98.     int mx = maxsum(a);
  99.     for(int j=0;j<m;++j){
  100.         if(sum(a, j) == mx){
  101.             del_column(a, &m, j);
  102.         }
  103.     }
  104. }
  105.  
  106. void clearing(){ //освобождение памяти
  107.     for(int i=0;i<n;++i){
  108.         free(a[i]);
  109.     }
  110.     free(a);
  111. }
  112.  
  113. int main()
  114. {
  115.     create(&a, &n, &m); // создание массива
  116.     printArr(a);
  117.     modif(a);
  118.     printArr(a);
  119.     clearing();
  120.     return 0;
  121. }
  122.  
  123.  
Advertisement
Add Comment
Please, Sign In to add comment