题目来源:
题目描述
数独游戏,具体规则如下:
每一行都用到1,2,3,4,5,6,7,8,9, 位置不限,
每一列都用到1,2,3,4,5,6,7,8,9, 位置不限,
每3*3的格子(共9个这样的格子)都用到1,2,3,4,5,6,7,8,9, 位置不限,
游戏过程就是用1,2,3,4,5,6,7,8,9填充空白,并满足每行,每列,每个九宫格都用到1,2,3,4,5,6,7,8,9,
如下是个正确的sudoku:
输入格式
输入n个数独,你来验证它是否违反规则。
第一行为数独个数,第二行开始为第一个数独,之后第二个,至第n个。
注意:每个数独间有个回车隔开。
输出格式
若正确则输出"Right",否则输出"Wrong", 输出一个换一行。
说明
1<=n<=20(输入的数独个数)
不论输入的数独是否正确,数据保证每个数都在1-9间。
Sample Input
25 8 1 4 9 3 7 6 29 6 3 7 1 2 5 8 42 7 4 8 6 5 9 3 11 2 9 5 4 6 3 7 84 3 6 1 8 7 2 9 57 5 8 3 2 9 1 4 68 9 2 6 7 1 4 5 36 1 5 9 3 4 8 2 73 4 7 2 5 8 6 1 91 2 3 4 5 6 7 8 92 3 4 5 6 7 8 9 13 4 5 6 7 8 9 1 24 5 6 7 8 9 1 2 35 6 7 8 9 1 2 3 46 7 8 9 1 2 3 4 57 8 9 1 2 3 4 5 68 9 1 2 3 4 5 6 79 1 2 3 4 5 6 7 8
Sample Output
RightWrong
解题:
此题只是对传统数独的校验,较为简单,分别校验行,列,小块
答案:
import java.util.HashSet;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][][] sudoku = new int[n][9][9]; boolean[] check = new boolean[n]; for (int i = 0; i < n; i++) { check[i] = true; for (int j = 0; j < 9; j++) { HashSetseth = new HashSet(); for (int k = 0; k < 9; k++) { sudoku[i][j][k] = sc.nextInt(); seth.add(sudoku[i][j][k]); } if (seth.size() < 9) { check[i] = false; } } } for (int i = 0; i < n; i++) { if (check[i]) { for (int j = 0; j < 9; j++) { HashSet setl = new HashSet(); for (int k = 0; k < 9; k++) { setl.add(sudoku[i][k][j]); } if (setl.size() < 9) { check[i] = false; } } } } for (int i = 0; i < n; i++) { if (check[i]) { for (int j = 0; j < 9; j++) { HashSet set = new HashSet(); int countl = 0; for (int k = 0; k < 3; k++) { int counth = 0; for (int l = 0; l < 3; l++) { set.add(sudoku[i][k + countl][l + counth]); } counth += 3; } countl += 3; if (set.size() < 9) { check[i] = false; } } } } for (int i = 0; i < n; i++) { System.out.println(check[i] ? "Right" : "Wrong"); } }}
or
import java.util.Arrays;import java.util.Scanner; public class Main { private static Scanner in; public static void main(String[] args) { in = new Scanner(System.in); int n = in.nextInt(); outer: for(int t=0;t
or
#include#include using namespace std;bool isunique(int a[]){ bool flag = true; sort(a, a + 9); for (int i = 0; i < 9; i++) if (a[i] != i + 1) { flag = false; break; } return flag;}string issudoku(){ string si; int su[9][9], s[9]; for (int i = 0; i < 9; i++) for (int j = 0; j < 9; j++) cin >> su[i][j]; bool flag = true; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) s[j] = su[i][j]; if (!isunique(s)) { flag = false; break; } } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) s[j] = su[j][i]; if (!isunique(s)) { flag = false; break; } } for (int i = 0; i < 9; i += 3) for (int j = 0; j < 9; j += 3) { for (int m = 0; m < 3; m++) for (int n = 0; n < 3; n++) s[3 * m + n] = su[i + m][j + n]; if (!isunique(s)) { flag = false; break; } } if (flag) si = "Right"; else si = "Wrong"; return si;}int main(){ int n; cin >> n; string s[20]; for (int i = 0; i < n; i++) s[i] = issudoku(); for (int i = 0; i < n; i++) cout << s[i] << endl; return 0;}
posted @ 2019-05-15 15:47 阅读( ...) 评论( ...)