Заменить матрицу, чтобы первой стояла строка с max суммой элементов, а последней - с min суммой - C (СИ)
Формулировка задачи:
заменить заданную прямоугольную матрицу так, чтобы на первом месте стояла строка максимальной а на последнем месте строка с минимальной суммой элементов, сохранив все элементы исходной матрицы.
Что не так, поправьте пожалуйста.
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <math.h>
- int i, j, l, maxstr, sum, minstr, n, max, min, k, u;
- int main()
- {
- int a[i][j], b[i][j];
- printf("kolichestvo strok matrici=");
- scanf("%d",&n);
- printf("kolichestvo stolbcov matrici=");
- scanf("%d",&l);
- for(i = 0; i < n; i++)
- {
- for (j = 0; j <l; j++)
- {
- printf("Vvedite b[%d][%d]", i, j);
- scanf("%d",&b[i][j]);
- }
- }
- for (i=0;i<n;i++)
- {
- printf("\n");
- for (j=0;j<l;j++)
- {
- printf("%d ",b[i][j]);
- }
- }
- sum=0;
- for (j=0;j<l;j++)
- {
- sum=sum+b[1][j];
- max=sum;
- maxstr=0;
- min=sum;
- minstr=0;
- }
- for (i=0;i<n;i++)
- { sum=0;
- for (j=0; j<l;j++)
- { sum=sum+b[i][j];
- if (max>sum)
- {
- max=sum;
- maxstr=i;
- }
- if (min<sum)
- {
- min=b[i][j];
- minstr=i;
- }
- }
- }
- if(min!=max)
- {
- for (j=0;j<l;j++)
- {
- a[0][j]=b[maxstr][j];
- }
- for (i=0;i<n;i++)
- {
- k=0;
- if (i!=maxstr)
- {
- if (i!=minstr)
- {
- k++;
- for (j=0;j<l;j++)
- {
- b[k][j]=a[i][j];
- }
- }
- }
- }
- for (j=0;j<l;j++)
- {
- a[n][j]=b[minstr][j];
- }
- }
- else
- {
- printf(summa vseh stroc ravna);
- }
- for (i=0;i<n;i++)
- {
- printf("\n");
- for (j=0;j<l;j++)
- {
- printf("%d ",a[i][j]);
- }
- }
- system("PAUSE");
- return 0;
- }
Решение задачи: «Заменить матрицу, чтобы первой стояла строка с max суммой элементов, а последней - с min суммой»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- //заменить заданную прямоугольную матрицу так, чтобы на первом месте стояла
- //строка максимальной а на последнем месте строка с минимальной суммой элементов,
- // сохранив все элементы исходной матрицы.
- int main()
- {
- int i, j, l, maxstr, minstr, n, max = 0, min, sum, **p = NULL, *tmp;
- printf("kolichestvo strok matrici=");
- scanf("%d",&n);
- printf("kolichestvo stolbcov matrici=");
- scanf("%d",&l);
- p = malloc(n * sizeof(*p));
- for(i = 0; i < n; i++){
- p[i] = malloc(l * sizeof(p));
- for (j = 0; j <l; j++){
- printf("Vvedite b[%d][%d]", i, j);
- scanf("%d", &p[i][j]);
- if(i == 0)
- max += p[i][j];
- }
- }
- min = max;
- maxstr = minstr = 0;
- puts("Source matrix:");
- for (i = 0; i < n; i++){
- sum = 0;
- for (j = 0; j < l; j++){
- printf("%6d",p[i][j]);
- sum += p[i][j];
- }
- if(sum > max){
- max = sum;
- maxstr = i;
- }
- if(sum < min){
- min = sum;
- minstr = i;
- }
- printf("\n");
- }
- printf("maximum sum is row %d = %d minimum sum is row %d = %d\n", maxstr, max, minstr, min);
- puts("Sorted matrix:");
- tmp = p[0];
- p[0] = p[maxstr];
- p[maxstr] = tmp;
- tmp = p[n - 1];
- p[n - 1] = p[minstr];
- p[minstr] = tmp;
- for(i = 0; i < n; i++){
- for(j = 0; j < l; j++)
- printf("%6d", p[i][j]);
- printf("\n");
- }
- for(i = 0; i < n; i++)
- free(p[i]);
- free(p);
- p = NULL;
- return 0;
- }
Объяснение кода листинга программы
- Подключение необходимых библиотек
- Задание постановки задачи
- Объявление переменных: i, j, l, maxstr, minstr, n, max, min, sum, *p = NULL, tmp;
- Ввод количества строк и столбцов матрицы
- Выделение памяти под матрицу
- Ввод элементов матрицы
- Инициализация переменных max и min значением первого элемента матрицы
- Поиск строки с максимальной суммой элементов
- Поиск строки с минимальной суммой элементов
- Вывод исходной матрицы
- Вывод матрицы с замещенными строками
- Освобождение памяти
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д