C++编程一道题目
给出由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。"改变...
给出由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。
你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。
"改变矩阵元素"的操作定义为0变成1,1变成0。
关于输入 :
包含多个测试数据。每个测试数据有多行,第一行为矩阵的大小n(n<100),以下n行为矩阵的值。
输入以0结束。
关于输出 :
如果矩阵符合条件,则输出OK
如果矩阵仅改变一个矩阵元素就能符合条件,则输出Change bit (x,y),其中x和y为该元素的坐标
如果不符合以上两条,输出Corrupt
例子输入
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
4
1 0 1 0
0 0 1 0
1 1 1 1
0 1 0 1
4
1 0 1 0
0 1 1 0
1 1 1 1
0 1 0 1
0
例子输出
OK
Change bit (2,3)
Corrupt 展开
你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。
"改变矩阵元素"的操作定义为0变成1,1变成0。
关于输入 :
包含多个测试数据。每个测试数据有多行,第一行为矩阵的大小n(n<100),以下n行为矩阵的值。
输入以0结束。
关于输出 :
如果矩阵符合条件,则输出OK
如果矩阵仅改变一个矩阵元素就能符合条件,则输出Change bit (x,y),其中x和y为该元素的坐标
如果不符合以上两条,输出Corrupt
例子输入
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
4
1 0 1 0
0 0 1 0
1 1 1 1
0 1 0 1
4
1 0 1 0
0 1 1 0
1 1 1 1
0 1 0 1
0
例子输出
OK
Change bit (2,3)
Corrupt 展开
1个回答
展开全部
分别扫描数组的每行每列,记录下有奇数个行的行标个数和奇数个列的列标个数
如果两者均为0,则符合条件
如果row和col均为1,则要改变
其余情况均为Corrupt
#include<stdio.h>
#define N_MAX 100
int main(){
int n,a[N_MAX][N_MAX]; //数组尺寸、数组
int i,j; //遍历用
int x,y,sum,row,col; //记录修改坐标,临时求和,奇数个1的行个数、列个数
scanf("%d",&n);
while(n){
x = y = -1;
row = col = 0;
if(n==1){
scanf("%d",&x);
if(x==0){
printf("OK\n");
}else{
printf("Change bit(1,1)\n"); //不知道这里对不对?
}
scanf("%d",&n);
continue;
}
for(i=0;i<n;i++){
sum = 0;
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
sum += a[i][j];
}
if(sum%2){
row ++;
if(x==-1) x = i;
}
}
for(j=0;j<n;j++){
sum = 0;
for(i=0;i<n;i++){
sum += a[i][j];
}
if(sum%2){
col ++;
if(y==-1) y = j;
}
}
if(row==0 && col==0){
printf("OK\n");
}else if(row==1 && col==1){
printf("Change bit(%d,%d)\n",x+1,y+1);//看输出示例,矩阵坐标应该从1算起
}else{
printf("Corrupt\n");
}
scanf("%d",&n);
}
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |