1126: 布尔矩阵的奇偶性

题目描述
一个布尔方阵具有奇偶均势特性,当且仅当 每行、每列总和为偶数,即包含偶数个1。如下面这个4*4的矩阵就具有奇偶均势特性:
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
编写程序,读入一个n阶方阵并检查它是否具有奇偶均势特性。如果没有,你的程序应当再检查一下它是否可以通过修改一位(把0改为1,把1改为0)来使它具有奇偶均势特性;如果不可能,这个矩阵就被认为是破坏了。

输入
第一行是一个整数n ( 0< n < 100 ),代表该方阵的阶数。然后输入n 行,每行n个整数(0或1)。
输出
如果矩阵是布尔矩阵,输出“OK”;如果能通过只修改该矩阵中的一位来使它成为布尔矩阵,则输出“Change bit(i,j)”,这里i和j是被修改的元素的行与列(行,列号从0开始);否则,输出“Corrupt”。
样例输入 Copy
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
样例输出 Copy
OK

代码

#include<stdio.h>
int main()
{int i,j,n,a[100][100],sum,x,y,flag1=0,flag2=0;scanf("%d",&n);//输入矩阵for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);//判断其每行总和是否为偶数for(i=0;i<n;i++){sum=0;for(j=0;j<n;j++)sum+=a[i][j];if(sum%2!=0){flag1++;   //计算共有多少行的一行之和不为偶数,大于1的话说明无奇偶均势性 x=i;    //应该修改的行的位置,在flag1大于1时无意义 }  }
//判断每列之和是否为偶数for(i=0;i<n;i++){sum=0;for(j=0;j<n;j++)sum+=a[j][i];    if(sum%2!=0){flag2++;    //计算共有多少列的一列之和不为偶数,大于1的话说明无奇偶均势性y=i;    //应该修改的列的位置,在flag2大于1时无意义 }}if(flag1==0&&flag2==0)    //说明每行每列各自总和均为偶数 printf("OK\n");  else if(flag1==1&&flag2==1)   //有一行、一列的总和不为偶数 ,此时可修改 printf("Change bit(%d,%d)\n",x,y);else    printf("Corrupt\n");return 0;
}

说明
此题当每行每列总和均为偶数时说明其为布尔矩阵,

经发现可知只有在只存在一行之和不为偶数,一列之和不为偶数这种情况时,矩阵才能被修改为布尔矩阵,并且修改的位置(x,y)就是那一行总和不为偶数的行坐标x和那一列之和不为偶数的列坐标y。

除了上述情况外,若存在着多行或多列之和不为偶数的情况,均无法通过修改一个位置使其成为布尔矩阵。

因此,在求每行之和的循环中设置一个变量flag1,计算一行之和不为偶数的数量,并让x的值等于当前一行之和不为偶数的行坐标,
在求每列之和的循环中设置一个变量flag2,计算一列之和不为偶数的数量,并让y的值等于当前一列之和不为偶数的列坐标,

flag1=0并且flag2=0 ,说明其每行每列之和均为偶数,输出OK
flag1=1并且flag2=1,说明可以通过修改成为布尔矩阵,修改位置为(x,y)

其他的flag1与flag2的值均说明无法修改成为布尔矩阵。

zzulioj1126: 布尔矩阵的奇偶性相关推荐

  1. ZZULIOJ 1126: 布尔矩阵的奇偶性

    布尔矩阵的奇偶性 题目描述 一个布尔方阵具有奇偶均势特性,当且仅当 每行.每列总和为偶数,即包含偶数个1.如下面这个4*4的矩阵就具有奇偶均势特性: 1 0 1 0 0 0 0 0 1 1 1 1 0 ...

  2. Tricks(四十七)—— 布尔矩阵(0-1矩阵)取反

    假定 X 是一个 0-1 元素构成的布尔矩阵,则对其取反,0 变成 1,1 变为 0(True 变为 False,False 变成 True),只需要一步简单的操作: Y = (X == False)

  3. java布尔矩阵程序_Java编程实现邻接矩阵表示稠密图代码示例

    我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法. 我们假设A是这个二维数组,那 ...

  4. 布尔矩阵分解 代码实现(BMF)--MEBF论文阅读

    文章目录 关于布尔矩阵分解 布尔矩阵分解的思路 MEBF思路 MEBF算法流程及分析 代码实现 布尔矩阵分解测试 参考文献 关于布尔矩阵分解 最近在做有关布尔矩阵分解方面的研究,因为自己的方向需要,找 ...

  5. 布尔矩阵与自动推荐系统

    Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4        经常上当当网购书的朋友都知道,当选择了几本书,放入购物车中 ...

  6. 布尔矩阵与个性化推荐系统(原创)

    经常上当当网购书的朋友都知道,当选择了几本书,放入购物车中,然后系统就会推荐你,购买了这两本书的用户还购买了什么书,淘宝等购物网站也有类似的功能. 在推荐系统中还有一个经典的案例,具体我记得不太清楚了 ...

  7. HAUTOJ 1100~1200题题解

    1100: 求组合数(函数专题) C #include<stdio.h> long long int t=1,a,b; long fact(long n) {t = 1;for (int ...

  8. ZZULIOJ 1114-1130 数组专题 参考代码

    一共17道题 下面代码供参考 每题前面标的有题号 1114 逆序 1115 数组最小值 1116 删除元素 1117 查找数组元素 1118 数列有序 1119 一维数组排序 1120 最值交换 11 ...

  9. 郑州轻工业大学OJ合集(C语言)【正在整理】

    代码仅供参考,为作者初次学习C语言时所写 以下代码均未添加注释 ZZULIOJ平台:http://acm.zzuli.edu.cn/ 学习编程语言,最忌眼高手低. copy后,不要直接粘到编译器里面, ...

最新文章

  1. 大数据时代要有大数据思维
  2. Win10打不开jar程序的解决方法 [转载]
  3. ML之回归预测:以某个数据集为例从0到1深入理解科学预测之回归(实数值年龄预测)问题的思路框架
  4. SourceTree 的初次使用的两个小问题
  5. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1009:带余除法
  6. c语言程序执行完main函数后,一个c程序在执行main函数之前和main之后都做了那些事情啊该如何解决...
  7. 今天讲讲hibernate的简单使用
  8. 1.1 Python 安装
  9. OO_2019_第一单元总结——表达式求导
  10. 菜鸟站长之家收集分享一些比较出名的外链发布地址
  11. 使用中文维基百科进行GloVe实验
  12. 第四章—密钥管理与分配
  13. js获取剪切板文字图片方法
  14. 74HC245引脚定义 使用方法
  15. VSTO二次开发PPT插件
  16. MBR、EBR、DBR
  17. 《计算机视觉和图像处理简介 - 中英双语 + 代码实践版》:基于PyTorch Softmax 进行 MNIST 手写数字分类【Digit Classification with Softmax】
  18. CEM计算电磁学 -- Lecture 2 学习笔记 (1) ---TMM 传输矩阵法(1)
  19. [SRS+docker]实现直播服务器 3 基于webRTC协议的srs低延迟直播研究
  20. GO 学习笔记(四)GORM框架

热门文章

  1. 上台演讲怎么做?这篇文章告诉你
  2. [打印机]提示“windows无法连接到打印机。键入的打印机名不正确”错误!
  3. 电商系统之订单系统设计
  4. 《人性》——电影简记
  5. 老化座 芯片测试座 (苏州奥金斯电子)
  6. 一些文章资料地址记录
  7. 【百炼】二分法求函数的零点(c语言)
  8. supplier java8_Java8-Supplier接口
  9. 虚拟机安装与ubuntu安装
  10. echarts type:line 折线图 折线折点样式