Найти номера двух соседних столбцов матрицы, у которых сумма элементов минимальна - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток. У меня небольшая проблема: Есть задачка: дам двумерный массив, нужно найти номера 2х соседних столбцов, у которых сумма элементов минимальна. Проблема при реализации одного варианта, если выходят суммы столбцов подобные этой: -2, 0, -1, -2, 10, то программа выводит на экран надпись о том, что нет соседних минимальных элементов. Почему так вывод я понимаю, ибо стоят доп. условия до этого. Кто-нибудь может предложить алгоритм, способный обработать данное условие? Никак придумать не могу.

Решение задачи: «Найти номера двух соседних столбцов матрицы, у которых сумма элементов минимальна»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
 
#define SIZE 7
 
int Summator(int **, int *);
int Result(int *);
int** GenerateMatrix(int size_matrix);
 
int main()
{
  int**matrix = GenerateMatrix(SIZE);
  int tmparray[SIZE] = {0};
  
    int index, j;
    for(index=0; index<SIZE; index++){
      for(j=0; j<SIZE; j++){
        printf("%3d ", matrix[index][j]);
      }
      printf("\n");
    }
    Summator(matrix, tmparray);
    printf("Summator itogo\n---------------------------------\n");
    for (index=0; index<SIZE; index++){
      printf("%d ", tmparray[index]);
    }
    int res = Result(tmparray);
    printf("\nResult index: %d\n", res );
    printf("Matrix rows: %d %d\n", tmparray[res], tmparray[res+1]);
  
  return 0;
}
 
int Summator(int **array, int *tmparray){
  int index, j;
  
  for(index=0; index<SIZE; index++){
    int summa=0;
    for(j=0; j<SIZE; j++){
      summa += array[index][j];
    }
    tmparray[index] = summa;    
  }
  return 0;  
}
 
  
int Result(int *tmparray){
  
  int result[SIZE]={0};
  int index;
 
  printf("\nResult tmp summa:\n------------------------------\n");
  for(index=0; index<SIZE; index++){
    printf("%d ", tmparray[index]);
    result[index] = tmparray[index] + tmparray[index+1];    
  }
  printf("\n");
 
  int realindex = 0, min = result[0];
  printf("\nRESULT\n--------------------------------------\n");
  for(index=0; index<SIZE-1; index++){    
    printf("%d ", result[index]);
    if (min>result[index]){  
      min = result[index];
      realindex = index;      
    }
    
  }  
  printf("\n");
  return realindex;
}
int** GenerateMatrix(int size_array){
  
  int **matrix = {NULL};
  int **result = NULL;
  
  if (NULL==(matrix = (int**) calloc(size_array, sizeof(int*)))){
    printf("error calloc memory for %3d memory block\n", size_array*size_array);
  } else {
    srand(time(NULL));
    int i;
    for(i = 0; i < size_array; i++){
      if (NULL==(matrix[i] = calloc(size_array, sizeof(int)))){
        printf("error calloc memory block\n");
        free(matrix);
      } 
      else{          
        int j;
        for(j=0; j<size_array; j++){
          matrix[i][j] = rand()%99;     
        }
      }
    }
    result = matrix;
  }
  return result;
}

Объяснение кода листинга программы

Код представляет собой программу на языке C, которая генерирует случайную матрицу 7х7, вычисляет сумму элементов каждой строки и сохраняет эти суммы в отдельном массиве. Затем программа находит два соседних индекса в этом массиве, у которых сумма минимальна. Список функций и их назначение:

  1. Summator - суммирует элементы каждой строки матрицы и сохраняет суммы в отдельном массиве.
  2. Result - находит два соседних индекса в массиве сумм, у которых сумма минимальна.
  3. GenerateMatrix - генерирует случайную матрицу заданного размера. Программа выводит на экран:
    • Сгенерированную матрицу.
    • Суммы элементов каждой строки матрицы.
    • Два соседних индекса в массиве сумм, у которых сумма минимальна.
    • Номера этих строк в матрице. Примечание: В данном коде предполагается, что матрица всегда будет квадратной. Если это не так, то код нужно будет доработать.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.5 из 5
Похожие ответы