Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // подключаем нужные нам библиотеки
- #include <iostream>
- #include <stdio.h>
- #include <locale.h>
- using namespace std;
- int **a; // исходный массив
- int n, m;
- int *sz; // массив размеров каждой из строк двумерного массива a
- // этот массив необходим, ведь в процессе удаления элементов a
- // перестает быть прямоугольной матрицей
- void create(int ***pa, int *pn, int* pm){ // создание массива
- printf("n = ");
- scanf("%d", &n);
- printf("m = ");
- scanf("%d", &m);
- sz = (int*)malloc(n*sizeof(int));
- a = (int**) malloc(n * sizeof(int*));
- for (int i = 0; i < n; i++) {
- a[i] = (int*) malloc(m * sizeof(int));
- }
- for(int i=0;i<n;++i){
- sz[i] = m;
- for(int j=0;j<m;++j){
- scanf("%d", &a[i][j]);
- }
- }
- *pa = a; // присваиваем указатель на начало массива
- *pn = n; // присваиваем указатель на a.size(по строкам)
- *pm = m; // присваиваем указатель на a.size(по столбцам)
- }
- void printArr(int **a){ // вывод
- printf("текущий массив = \n");
- for(int i = 0; i < n; ++i){
- for(int j = 0;j < sz[i]; ++j){
- printf(" %d", a[i][j]);
- }
- printf("\n");
- }
- }
- void del_element(int ***pa, int **psz, int *pn, int ind_i, int ind_j){ // функция удаления элемента
- if(ind_i>=n || ind_j>=sz[ind_i]){
- printf("error\n");
- }else if(sz[ind_i]==1){ //если перед удалением в строке всего 1 элемент, то количество строк умненьшается на 1
- --n;
- for(int i=ind_i;i<n;++i){
- a[i]=a[i+1];
- sz[i] = sz[i+1];
- }
- a = (int**)realloc(a, n * sizeof (int*));
- sz = (int*)realloc(sz, n * sizeof (int));
- }else{
- --sz[ind_i];
- for(int j = ind_j; j < sz[ind_i]; ++j){
- a[ind_i][j] = a[ind_i][j + 1];
- }
- a[ind_i] = (int*)realloc(a[ind_i], sz[ind_i] * sizeof(int));
- }
- *pa = a;
- *pn = n;
- *psz = sz;
- }
- int sum(int **a, int column){
- int sum =0;
- for(int i=0;i<n;++i){
- sum+=a[i][column];
- }
- return sum;
- }
- int maxsum(int **a){
- int mx = 0;
- for(int i=0;i<n;++i){
- mx+=a[i][0];
- }
- for(int i=0;i<m;++i){
- int cur = sum(a,i);
- if(cur>mx){
- mx = cur;
- }
- }
- return mx;
- }
- void del_column(int **a, int *pm, int ind_j){ // удаление строки
- for(int i = 0;i<n;++i){
- del_element(&a,&sz,&n,i, ind_j);
- }
- --m;
- *pm = m;
- }
- void modif(int **a){
- int mx = maxsum(a);
- for(int j=0;j<m;++j){
- if(sum(a, j) == mx){
- del_column(a, &m, j);
- }
- }
- }
- void clearing(){ //освобождение памяти
- for(int i=0;i<n;++i){
- free(a[i]);
- }
- free(a);
- }
- int main()
- {
- create(&a, &n, &m); // создание массива
- printArr(a);
- modif(a);
- printArr(a);
- clearing();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment