OJ-数字九宫格

题目描述

在九宫格里面填上1~9九个数字,每个格内的数字不能相同,目前已经填上了6个数字,要求你填上剩下3个数字

18
75
24

问:能否有一种填法,在缺失数字的空格填上数字后,使得任一行(注意只要求行)上的三个数之和都是奇数?

输入格式

3行,每行3个数字,以空格分隔,还没有填上数字的位置填0表示

输出格式

Y或者N

输入样例

8 2 0

4 0 6

7 0 9

输出样例

Y

【提示:从上到下的空位依次填上1,3,5即可提交】

话不多说直接上代码:

#include <stdio.h>

typedef struct node
{
    int x;
    int y;
}node;

int main()
{
    //矩阵
    int a[3][3];
    //未填写的数字和坐标
    int leftNum[3];
    node leftXY[3];
    //散列表
    int num[9]={0};
    //行的和
    int sum;
    //计数器
    int count=0;
    //奇偶数计数器
    int isBin1=0,notBin1=0;
    //未填写的数中奇偶数个数
    int isBin2=0,notBin2=0;
    //输入和在线处理
    for(int i=0;i<3;++i)
    {
        sum=0;
        for(int j=0;j<3;++j)
        {
            scanf("%d",&a[i][j]);
            //更新行和
            sum+=a[i][j];
            //更新散列表
            num[a[i][j]-1]=1;
            //更新未填写的坐标
            if(!a[i][j])
            {
                leftXY[count].x=i;
                leftXY[count].y=j;
                count++;
            }
        }
        //统计奇偶数个数
        if(sum%2==0) isBin1++;
        else notBin1++;
    }
    //重置计数器
    count=0;
    //取出未填写数
    for(int i=0;i<9;++i)
    {
        if(!num[i])
        {
            //更新未填写数
            leftNum[count++]=i+1;
            //更新未填写的数中奇偶数个数
            if((i+1)%2==0) isBin2++;
            else notBin2++;
        }
    }
    //若行和奇数的个数等于未填写数偶数的个数
    //且若行和偶数的个数等于未填写数奇数的个数
    //即存在满足要求的
    if(isBin1==notBin2 && notBin1==isBin2) printf("Y");
    else printf("N");
    return 0;
}

思路很简单,就是看没填数字前每行的和有几个奇数,几个偶数,然后看没填的数字里有几个奇数,几个偶数

易知奇数+奇数=偶数;奇数+偶数=奇数

所以要满足任一行的和为奇数,那么未填数字前行的和有多少个奇数,未填的数字就要有多少个偶数,偶数同理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值