输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。

输入

第一行为整数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

  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int t;  
  5.     cin >> t;  
  6.     for (int i = 0; i < t; i++) {  
  7.         int m = 0, n = 0;  
  8.         cin >> m >> n;  
  9.         int shuzu[100][100];//矩阵最大100*100  
  10.         int sum = 0;  
  11.         for (int j = 0; j < m; j++) {  
  12.             for (int o = 0; o < n; o++) {  
  13.                 cin >> shuzu[j][o];//输入数组数值  
  14.                 if (j == 0 || j == m - 1)//先算首行,末行  
  15.                     sum += shuzu[j][o];  
  16.                 else if(o==0||o==n-1)//else 之后再用if 找除了四个角落之外的首列,末列  
  17.                     sum += shuzu[j][o];  
  18.             }  
  19.         }  
  20.         cout << sum << endl;  
  21.     }  
  22.     return 0;  
  23. }

猜你喜欢

转载自blog.csdn.net/blaze003003/article/details/79212693