1054.数独 SDNUOJ 1054

Description
syc最近迷上了数独这个游戏,他在完成一个数独后总要费一些时间来检查。于是他把lg作为苦力拽来帮他检查。由于lg是搞基的,所以他就想写个程序来判断syc完成的数独是否正确。不过最近他在感情上遇到了一些问题没有功夫去写,就想请你帮他完成这个任务。
数独规则:拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。
Input
一个9*9个矩阵
每个为1到9的数字
Output
一个数字,1为构成数独,0为不构成数独
Sample Input
3 8 7 9 6 2 5 1 4
5 1 9 4 3 8 7 6 2
6 2 4 1 5 7 3 9 8
8 7 6 3 1 9 2 4 5
2 9 1 5 8 4 6 7 3
4 3 5 2 7 6 1 8 9
7 5 8 6 4 3 9 2 1
9 4 3 7 2 1 8 5 6
1 6 2 8 9 5 4 3 7
Sample Output
1

把题解写成这样我也很无奈,我实在不会了,有简单的代码麻烦您告诉我一下,我出两块钱。以此博客为证。

#include <cstdio>
#include <iostream>
using namespace std;

int a[15][15];
int b[100];

bool check(int a, int b, int c, int d, int e, int f, int g, int h, int m)
{
    if(a == 0 || b == 0 || c == 0 || d == 0 || e == 0 || f == 0 || g == 0 || h == 0 || m == 0)
        return 0;
    if(a == b || a == c || a == d || a == e || a == f || a == g || a == h || a == m )
        return 0;
    if(b == c || b == d || b == e || b == f || b == g || b == h || b == m )
        return 0;
    if(c == d || c == e || c == f || c == g || c == h || c == m )
        return 0;
    if(d == e || d == f || d == g || d == h || d == m )
        return 0;
    if(e == f || e == g || e == h || e == m )
        return 0;
    if(f == g || f == h || f == m )
        return 0;
    if(g == h || g == m || h == m )
        return 0;
    switch(a / 10)
    {
    case 0:
        return 1;
    default :
        return 0;
    }
}


int main()
{
    int tot = 1;
    for(int i = 1; i <= 9; ++i)
        for(int j = 1; j <= 9; ++j)
        {
            scanf("%d", &a[i][j]);
            b[tot++] = a[i][j];
        }
    bool flag;
    for(int i = 1; i <= 9; ++i)
    {
        flag = check(a[i][1], a[i][2], a[i][3], a[i][4], a[i][5], a[i][6], a[i][7], a[i][8], a[i][9]);
        if(!flag)
        {
            cout << '0' << '\n';
            return 0;
        }
    }
    for(int j = 1; j <= 9; ++j)
    {
        flag = check(a[1][j], a[2][j], a[3][j], a[4][j], a[5][j], a[6][j], a[7][j], a[8][j], a[9][j]);
        if(!flag)
        {
            cout << '0' << '\n';
            return 0;
        }
    }
    int t = 9;
    while(t--)
    {
        int c = 1;
        flag = check(b[c], b[c + 1], b[c + 2], b[c + 9], b[c + 10], b[c + 11], b[c + 18], b[c + 19], b[c + 20]);
        if(!flag)
        {
            cout << '0' << '\n';
            return 0;
        }
        c += 3;
    }
    cout << '1' << '\n';
    return 0;
}

全部评论

相关推荐

11-13 20:32
门头沟学院 Java
面向未来编程code:我没看到他咋急,他不就问你个问题。。。
点赞 评论 收藏
分享
vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务