题目描述:
小傲参加了学校文物修复小组,老师为考验同学们的细心程度,安排大家对碎陶片进行填色。陶片均可视为一个矩形,同学们可将陶片划分为一个n行n列的矩阵,每个矩阵元素都可被填充为红色R或蓝色B,但要求这个矩阵的每行每列中红色的数量都为偶数,或者仅改变一个矩阵元素的填色就能符合上述要求也是可以的,"改变矩阵元素"的操作定义为R变成B或者B变成R。因为同学们过于热情,提交了大量的陶片,老师一人无法完成检查,请你通过程序编写帮助老师完成陶片检查。
输入格式:
输入n+1行,第一行为矩阵的大小n (0 < n < 100),以下n行为矩阵每一行中的元素,元素之间以一个空格隔开。
输出格式:
如果矩阵符合条件,则输出OK;如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元素所在的行号和列号,以一个空格分开。如果不符合以上两条,输出Corrupt。
#include<iostream>
#include<cstdio>
using namespace std;
#define N 100//你们懂我意思吧?不然下面还要打多少个100,定义一个标识符(N)来表示一个常量(100)
int main(){
int n;
char ar[N][N]={0};//二维数组用来存放输入内容
int row_num[N]={0},row_cnt=0,row=0;//(横排)row_num[N]存放“R”的个数,row_cnt存放错误个数,row存放横排数字(横着数第几个)
int col_num[N]={0},col_cnt=0,col=0;//(竖排)同上
cin>>n;//输入矩阵大小
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>ar[i][j];//输入矩阵
if(ar[i][j]=='R')//若等于‘R’
{
row_num[i]++;//则数量自增
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(ar[j][i]=='R')
{
col_num[i]++;//同上(竖排)
}
}
}
for(int i=0;i<n;i++)
{
if(row_num[i]%2==1)//若‘R’的个数是奇数
{
row_cnt++;//则错误数自增
row=i;//将i存入横排中
}
if(col_num[i]%2==1)
{
col_cnt++;
col=i;//同上(竖排)
}
}
if(row_cnt==0&&col_cnt==0)
{
cout<<"OK";//如果错误数为0,则OK
}
else if(row_cnt==1&&col_cnt==1)
{
cout<<row+1<<" "<<col+1;//若错误数为1,则输出横排竖排坐标(+1是因为字符串下标由0开始)
}
else
{
cout<<"Corrupt";//若错误数大于2,则输出不行
}
return 0;
}
是不是很棒呢