问题 D: 零基础学C/C++119——矩阵整理
题目描述
输入一个m×n的矩阵,计算每行的和。将行号最高的行与矩阵的第一行进行位置交换,输出调整后的矩阵以及每行的和。
输入
输入为多组测试数据。
先输入矩阵的行数、列数n和m(M,N均不超过10),另起一行后再输入一个m×n的整数矩阵,每列数据用空格隔开;每行数据用回车隔开。
输出
整理后的数据以及每行的和。
样例输入 Copy
3 4
1 3 6 2
2 4 11 1
4 5 6 7
样例输出 Copy
4 5 6 7 22
2 4 11 1 18
1 3 6 2 12
题解
直接在列上多加一行,在每一行计算sum填充到a[m]内(行列初始为0)
然后输出时先输出最后一行,然后是n-2行,然后是第一行
代码(AC)
点击查看代码
#include <stdio.h>
int main (){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int a[n][m+1];//行n 列m
for(int i=0;i<n;i++)
{
a[i][m]=0;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
a[i][m]=a[i][m]+a[i][j];
}
}
for(int i=0;i<m+1;i++)
{
printf("%d",a[n-1][i]);
if(i<m) printf(" ");
if(i==m) printf("\n");
}//最后一行
for(int i=1;i<n-1;i++)
{
for(int j=0;j<m+1;j++)
{
printf("%d",a[i][j]);
if(j<m) printf(" ");
if(j==m) printf("\n");
}
}//中间
for(int i=0;i<m+1;i++)
{
printf("%d",a[0][i]);
if(i<m) printf(" ");
if(i==m) printf("\n");
}//第一行
}
return 0;
}