TYVJ 1093 验证数独 解题报告
怎么说这个题目,反正纯判断就可以了,不太废话,上代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> int num[9][9]; int used[9]; int corner(int a, int b) { int i, j; for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ if(used[num[a + i][b + j]]){ return 0; } used[num[a + i][b + j]] = 1; } } return 1; } void deal(void) { int i, j; for(i = 0; i < 9; i++){ for(j = 0; j < 9; j++){ scanf("%d", &num[i][j]); num[i][j]--; } } for(i = 0; i < 9; i++){ memset(used, 0, sizeof(used)); for(j = 0; j < 9; j++){ if(used[num[i][j]]){ printf("Wrong\n"); return; } used[num[i][j]] = 1; } } for(i = 0; i < 9; i++){ memset(used, 0, sizeof(used)); for(j = 0; j < 9; j++){ if(used[num[j][i]]){ printf("Wrong\n"); return; } used[num[j][i]] = 1; } } for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ memset(used, 0, sizeof(used)); if(corner(3 * i, 3 * j) == 0){ printf("Wrong\n"); return ; } } } printf("Right\n"); return; } int main(int argc, char **argv) { int n; scanf("%d", &n); while(n--){ deal(); } return 0; }