Y.美丽矩阵

矩阵是什么呢?
2 2 2
3 3 3
3 3 3

如上所示,就是一个3∗3的矩阵。

现在要输入一个5∗5的矩阵,而且矩阵中除了某个位置是1之外,其他位置都是0,我们称一个矩阵是美丽的,只有这个矩阵的中心位置(即第三行第三列的位置)为1,其他位置都是0。现在每次你可以将矩阵中相邻的两个位置的数交换,问你最少需要交换几次可以使得矩阵变得美丽。

求助!!!

5 个赞

首先呢矩阵输入你应该会吧

3 个赞

然后呢你需要找到1的位置

2 个赞
for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			if(a[i][j]==1){
    			cout<<abs(3-i)+abs(3-j);
			}
		}
	}

这个是核心代码

2 个赞

在输入矩阵的时候找出只为1的点坐标,在cout<<abs(x-3)+abs(y-3)就行了
如果有不行的情况就再记录有几个值为1

2 个赞

这很关键了,求给个解决方案吧

2 个赞

#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c,d,e;
int f,g,h,i,j;
int k,l,m,n,o;
int p,q,r,s,t;
int u,v,w,x,y;
int a1,a2,a3,a4,a5;
int b1,b2,b3,b4,b5;
int z=0;
cin>>a>>b>>c>>d>>e;
cin>>f>>g>>h>>i>>j;
cin>>k>>l>>m>>n>>o;
cin>>p>>q>>r>>s>>t;
cin>>u>>v>>w>>x>>y;
a1=a+b+c+d+e;
a2=f+g+h+i+j;
a3=k+l+m+n+o;
a4=p+q+r+s+t;
a5=u+v+w+x+y;
if(a1==1 || a5==1){
z+=2;
}
else if(a2==1 || a4==1){
z+=1;
}
else{
z+=0;
}
b1=a+f+k+p+u;
b2=b+g+l+q+v;
b3=c+h+m+r+w;
b4=d+i+n+s+x;
b5=e+j+o+t+y;
if(b1==1 || b5==1){
z+=2;
}
else if(b2==1 || b4==1){
z+=1;
}
else{
z+=0;
}
cout<<z;
return 0;
}