• OpenJudge计算概论-错误探测


    /*========================================================================
    错误探测
    总时间限制: 1000ms 内存限制: 65536kB
    描述
    给出由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
    
    分析:
    输入数组时不需存储数组的数据;
    输入时同时计算并用两个一维数组存储每一行、每一列的和 ;
    注意求和前要对两个一维数组清零;
    统计奇数个1的行和奇数个1的列 的数量rowN和colN;
    假如rowN==colN==1说明有且仅有一行和一列含有奇数个1
    (这个情况只需要把该行和该列交叉处的值改变一下即可,所以结果就是Change bit (2,3)) 
    假如 rowN==colN==0,则是OK
    假如是其他情况则是Corrupt
    
    注意:输出案例Change bit (2,3)在左括号'(' 前是有一个空格的。少了这个空格,
    提交时格式错误的。 
     
    另外:分析一下输入输出案例第二组数据发现,题目默认数组的下标从1开始。 
    ==========================================================================*/
    #include<stdio.h>
    int main()
    {
        int n,i,j,t;
        int rowSum[100],colSum[100];//分别存储每一行、每一列的和 
        int rowN,colN;//存储有奇数个1的行数、列数 
        int x,y;
        freopen("6.in","r",stdin);
        freopen("result.out","w",stdout);
        scanf("%d",&n);
        while(n!=0)
        {
            for(i=0;i<100;i++)//清空求和数组 
            {
                rowSum[i]=0;
                colSum[i]=0;
            }
            //输入的同时计算每一行每一列的和 
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                {
                    scanf("%d",&t);
                    rowSum[i]=rowSum[i]+t;
                    colSum[j]=colSum[j]+t; 
                }
            }
            rowN=0;
            colN=0;
            for(i=0;i<n;i++)//检测奇数个1的行、奇数个1的列 
            {
                if(rowSum[i]&1)
                {
                    rowN++;
                    x=i;
                }
                if(colSum[i]&1)
                {
                    colN++;
                    y=i;
                }
            }
            //判断结果 
            if(rowN==1&&colN==1)
            {
                printf("Change bit (%d,%d)
    ",x+1,y+1);
            }
            else if(rowN==0&&colN==0)
            {
                printf("OK
    ");
            }
            else 
                printf("Corrupt
    ");
            //输入下一组的阶数 
            scanf("%d",&n);
        }
        return 0;
    }
  • 相关阅读:
    视觉里程计VO-直接法
    Linux安装libcholmod-dev找不到的解决方法
    Levenberg-Marquadt Method
    Gauss-Newton Method
    CMake
    方差 标准差 协方差
    SFM
    矩阵分解
    kvm学习笔记
    python学习笔记
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/3479563.html
Copyright © 2020-2023  润新知