Заменить матрицу, чтобы первой стояла строка с 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 значением первого элемента матрицы
- Поиск строки с максимальной суммой элементов
- Поиск строки с минимальной суммой элементов
- Вывод исходной матрицы
- Вывод матрицы с замещенными строками
- Освобождение памяти