输入
第一行为整数k,表示有k组数据。
每组数据有多行组成,表示一个矩阵:
第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以空格分隔。
接下来输入的m行数据中,每行包含n个整数,整数之间以空格作为间隔。
输出
输出对应矩阵的边缘元素和,一个一行。
#include <cstdio>#include <iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
int a[m][n];
for (int i=0;i<m;i++)
for (int j=0;j<n;j++)
cin>>a[i][j];
int sum=0;
int x=0,y=0;
int xflag=0;
int yflag=1;
int count=n+m-1+n-1+m-2;
while (count>0)
{
if (yflag==1)//行号不变,列号增加
{
sum+=a[x][y]; count--;
y++;
if (y==n) {yflag=0;xflag=1;y--;x++;}
}
if (xflag==1)//行号增加,列号不变
{
sum+=a[x][y]; count--;
x++;
if (x==m) {xflag=0;yflag=-1;x--;y--;}
}
if (yflag==-1)//列号减少,行号不变
{
sum+=a[x][y]; count--;
y--;
if (y<0) {yflag=0;xflag=-1;y++;x--;}
}
if (xflag==-1)//行号减少,列号不变
{
sum+=a[x][y]; count--;
x--;
if (x<0) {xflag=0;yflag=1;x++;y++;}
} }
cout<<sum<<endl;return 0;
}
panda711
- #include<iostream>
- using namespace std;
- int main() {
- int t;
- cin >> t;
- for (int i = 0; i < t; i++) {
- int m = 0, n = 0;
- cin >> m >> n;
- int shuzu[100][100];//矩阵最大100*100
- int sum = 0;
- for (int j = 0; j < m; j++) {
- for (int o = 0; o < n; o++) {
- cin >> shuzu[j][o];//输入数组数值
- if (j == 0 || j == m - 1)//先算首行,末行
- sum += shuzu[j][o];
- else if(o==0||o==n-1)//else 之后再用if 找除了四个角落之外的首列,末列
- sum += shuzu[j][o];
- }
- }
- cout << sum << endl;
- }
- return 0;
- }