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