• NOI / 1.8编程基础之多维数组 04:错误探测


    04:错误探测

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。
    你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。
    "改变矩阵元素"的操作定义为0变成1或者1变成0。

    输入
    输入n + 1行,第1行为矩阵的大小n(0 < n < 100),以下n行为矩阵的每一行的元素,元素之间以一个空格分开。
    输出
    如果矩阵符合条件,则输出OK;
    如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元素所在的行号和列号,以一个空格分开。
    如果不符合以上两条,输出Corrupt。
    样例输入
    样例输入1
    4
    1 0 1 0
    0 0 0 0
    1 1 1 1
    0 1 0 1
    
    样例输入2
    4
    1 0 1 0
    0 0 1 0
    1 1 1 1
    0 1 0 1
    
    样例输入3
    4
    1 0 1 0
    0 1 1 0
    1 1 1 1
    0 1 0 1
    样例输出
    样例输出1
    OK
    
    样例输出2
    2 3
    
    样例输出3
    Corrupt

    解题思路(202012-二级):

    分别计算行、列的奇数个数

    1. 行列奇数行个数均为0,"OK"

    2. 行列奇数行个数均为1,则修改一个位置即可。

    3. 否则:Corrupt

    #include <iostream>
    using namespace std;
    int main()
    {
        // in 1
        int n;
        cin >> n;
        // in 2 and algorithm
        int row[100] = {0};                // 行累计 
        int col[100] = {0};                // 列累计 
        for (int i=0; i<n; i++) {
            for (int j=0; j<n; j++) {
                int b;
                cin >> b;
                col[j] = (col[j] + b) % 2;
                row[i] = (row[i] + b) % 2;
            }
        }
        //
        int row_mark, column_mark;
        int rows = 0, columns = 0;
        // 行列奇数计数 
        for (int i=0; i<n; i++) {
               if (row[i] > 0) {
                   row_mark = i + 1;
                   rows++;
               }
           }
           for (int i=0; i<n; i++) {
               if (col[i] > 0){
                   column_mark = i + 1;
                   columns++;
               }
        }
        // out
        if ((rows==0) && (columns==0)) {
            cout << "OK";
        } else if ((rows==1) && (columns==1)) {
            cout << row_mark << " " << column_mark;
        } else {
            cout << "Corrupt";
        }
        return 0;
    }
    博客园:http://www.cnblogs.com/linux-farmer/
  • 相关阅读:
    CAS 5.X 安装
    《从0到1》开启商业和未来的秘密
    阿里Java开发规约插件使用
    【Effective Java】阅读
    Java8 流的使用示例
    我对线程安全的理解
    APP微信支付实现
    如何将微信上传AMR格式语音转化为MP3格式
    如何在下载文件前确定文件名
    寻找水王1
  • 原文地址:https://www.cnblogs.com/linux-farmer/p/14094047.html
Copyright © 2020-2023  润新知