本文主要是介绍A - 6789(全面思考),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
题意:已知n行m列,输入的数字只有“6” “7” “8” “9”,问需是否能使矩阵变成中心对称;如果能,请输出最小的翻转次数;否则输出-1;
AC代码
#include <bits/stdc++.h>using namespace std;
int a[510][510];
int main()
{int n,m,i,j;cin>>n>>m;for(i=1; i<=n; i++){for(j=1; j<=m; j++){char ch;//题目数据没有空格,用字符处理;cin >> ch;a[i][j]=ch-'0';}}int sum=0;if(n==1&&m==1)//特判情况{if(a[n][m]==8)//8本身就是中心对称cout<<"0" << endl;elsecout<<"-1"<<endl;//其余都不是中心对称}else{int flag=1,f=1;for(i=1; i<=n; i++){for(j=1; j<=m; j++){if(a[i][j]==6&&a[i][j]==a[n+1-i][m+1-j])sum++;else if(a[i][j]==9&&a[i][j]==a[n+1-i][m+1-j])sum++;else if(a[i][j]==7&&a[i][j]==a[n+1-i][m+1-j])sum++;else if(a[i][j]==8&&a[i][j]==a[n+1-i][m+1-j])sum=sum+0;else if(a[i][j]==6&&a[n+1-i][m+1-j]==9)sum=sum+0;else if(a[i][j]==9&&a[n+1-i][m+1-j]==6)sum=sum+0;else{flag=0;break;}}if(flag==0){f=0;break;}}sum/=2;//全跑一遍,求一半if(m%2!=0&&n%2!=0)//特殊情况奇数行奇数列{if(a[(n/2)+1][(m/2)+1]==8)//中间数是8属于中心对称{f=1;}else f=0;//其余都不是中心对称}if(f==0) cout<<"-1"<<endl;else cout<<sum<<endl;}return 0;
}
这篇关于A - 6789(全面思考)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!