Description
编写一个程序输入一个m*n的矩阵存储并输出,并且求出每行的最大值和每行的总和。
要求把每行总和放入每行最大值的位置,如果有多个最大值,取下标值最小的那一个作为最大值。
最后将结果矩阵输出。
Input
输入的第一行包括两个整数m和n(1<=m,n<=100),分别代表矩阵的行和列的维数。
接下来的m行每行有n个数,代表矩阵的元素。
Output
可能有多组测试数据,对于每组数据,输出按题目要求执行后的矩阵。
Sample Input
2 4
35 1 70 25
79 59 63 65
9 3
82 28 62
92 96 43
28 37 92
5 3 54
93 83 22
17 19 96
48 27 72
39 70 13
68 100 36
Sample Output
35 1 131 25
266 59 63 65
172 28 62
92 231 43
28 37 157
5 3 62
198 83 22
17 19 132
48 27 147
39 122 13
68 204 36
思路
grid[i][j]>maxl 满足取下表标最小的每行的最大值这一条件
代码
#include<stdio.h>
#define INF -10000
int grid[200][200],n,m;
void solve()
{
int posr,posc,maxl,sum;
for(int i=0;i<n;i++)
{
maxl=INF; sum=0;
for(int j=0;j<m;j++)
{
sum+=grid[i][j];
if(grid[i][j]>maxl)
{
maxl=grid[i][j];
posr=i; posc=j;
}
}
grid[posr][posc]=sum;
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%d",&grid[i][j]);
}
}
solve();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(j==0)
printf("%d",grid[i][j]);
else
printf(" %d",grid[i][j]);
}
printf("\n");
}
}
return 0;
}