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)\n",x+1,y+1);
        }
        else if(rowN==0&&colN==0)
        {
            printf("OK\n");
        }
        else 
            printf("Corrupt\n");
        //输入下一组的阶数 
        scanf("%d",&n);
    }
    return 0;
}

 

 

 

 

 

 

 

 

 

posted on 2013-12-18 00:35  华山青竹  阅读(1174)  评论(0)    收藏  举报

导航