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   华山青竹  阅读(1147)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示