问题描述:矩阵的1范数定义为矩阵的每一列上的元素绝对值先求和,再从中娶个最大的,(列和最大);无穷范数定义为每一行上的元素绝对值先求和,再从中取最大的(行和最大)。给出一个矩阵求该矩阵的1范数和无穷范数。
输入说明:
第一行输入两个整数M,N,以空格分隔,表示矩阵的行数和列数(0<M,N<100)。后面的M行都为N个整数,以空格分隔,表示矩阵每一行的元素。
输出说明:
在一行上输出矩阵的1范数和无穷范数,以空格隔开。
输入样例:
3 4
2 3 -5 -7
4 6 8 -4
6 -11 -3 16
输出样例:
27 36
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[100][100];
int m,n;
scanf ("%d %d\n",&m, &n);
int i, j;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
scanf ("%d",&arr[i][j]);
}
}
int sum[100]={};//每列加和
for (j=0;j<n;j++)
{
for (i=0;i<m;i++)
{
sum[j] =sum[j] +abs(arr[i][j]);
}
}
int temp;//列加和由小到大排序
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if (sum[j]>sum[j+1])
{
temp=sum[j];
sum[j]=sum[j+1];
sum[j+1]=temp;
}
}
}
printf ("%d ", sum[n-1]);
int sum2[100]={};//每行加和
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
sum2[i] =sum2[i] +abs(arr[i][j]);
}
}
for (j=0;j<m-1;j++)//行之和由小到大排序
{
for (i=0;i<m-1-j;i++)
{
if (sum2[i]>sum2[i+1])
{
temp=sum2[i];
sum2[i]=sum2[i+1];
sum2[i+1]=temp;
}
}
}
printf ("%d", sum2[m-1]);
return 0;
}
|