Найти номера двух соседних столбцов матрицы, у которых сумма элементов минимальна - 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, вычисляет сумму элементов каждой строки и сохраняет эти суммы в отдельном массиве. Затем программа находит два соседних индекса в этом массиве, у которых сумма минимальна. Список функций и их назначение:
- Summator - суммирует элементы каждой строки матрицы и сохраняет суммы в отдельном массиве.
- Result - находит два соседних индекса в массиве сумм, у которых сумма минимальна.
- GenerateMatrix - генерирует случайную матрицу заданного размера.
Программа выводит на экран:
- Сгенерированную матрицу.
- Суммы элементов каждой строки матрицы.
- Два соседних индекса в массиве сумм, у которых сумма минимальна.
- Номера этих строк в матрице. Примечание: В данном коде предполагается, что матрица всегда будет квадратной. Если это не так, то код нужно будет доработать.