acm数独——java

1005. 数独

题目描述

数独游戏,具体规则如下:

每一行都用到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

2
5 8 1 4 9 3 7 6 2
9 6 3 7 1 2 5 8 4
2 7 4 8 6 5 9 3 1
1 2 9 5 4 6 3 7 8
4 3 6 1 8 7 2 9 5
7 5 8 3 2 9 1 4 6
8 9 2 6 7 1 4 5 3
6 1 5 9 3 4 8 2 7
3 4 7 2 5 8 6 1 9

1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7 8

Sample Output

Right
Wrong

这道题就是普通的数独判断很和简单,就是没有重复的数字就行代码如下
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<n;t++){
			int factor[][]=new int[9][9];
			for(int i=0;i<9;i++){
				for(int j=0;j<9;j++){
					factor[i][j]=in.nextInt();
				}
			}
			for(int i=0;i<9;i+=3){
				for(int j=0;j<9;j+=3){
					int s[]=new int[9];
					int f=0;
					for(int h=i;h<i+3;h++){
						for(int k=j;k<j+3;k++){
							s[f]=factor[h][k];
							f++;
						}
					}
					Arrays.sort(s);
					for(int h=0;h<8;h++){
						if(s[h]==s[h+1]){
							System.out.println("Wrong");
							continue outer;
						}
					}
				}

			}
			for(int i=0;i<9;i++){
				int s[]=new int[9];
				for(int j=0;j<9;j++){
					s[j]=factor[i][j];
				}
				Arrays.sort(s);
				for(int h=0;h<8;h++){
					if(s[h]==s[h+1]){
						System.out.println("Wrong");
						continue outer;
					}
				}

			}
			for(int i=0;i<9;i++){
				int s[]=new int[9];
				for(int j=0;j<9;j++){
					s[j]=factor[j][i];
				}
				Arrays.sort(s);
				for(int h=0;h<8;h++){
					if(s[h]==s[h+1]){
						System.out.println("Wrong");
						continue outer;
					}
				}
			}
			System.out.println("Right");
		}
	}

}

  

acm数独——java

时间: 2024-10-06 22:45:26

acm数独——java的相关文章

ACM中java的使用 (转)

ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner cin = new Scanner (new BufferedInputStream(System.in)); 例程: import java.io.*; import java.math.*; import java.util.*; import java.text.*; public class

【转】ACM中java的使用

原文博客:http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner cin = new Scanner (new BufferedInputStream(System.in)); 例程: import java.io.*; import

ZOJ ACM 1314(JAVA)

昨天做了几个题目,过于简单,就不在博客里面写了. 1314这道题也比较简单,写出来是因为我觉得在这里有一个小技巧,对于时间复杂度和空间复杂度都比较节省. 这个题目类似哈希表的求解,但是更简单.刚拿到题目时,我想当然的希望将查询结果放到一个数组里面,然后遍历查询是否有一样的mod值.但是感觉这样肯定是最普遍的方法而且效率也不是太高. 后来想到了其他的一些查询算法,比如二分,但是都感觉不太合适.直到我意识到这个过程和计算哈希表的过程类似,所以直接用mod值作为数组的下标索引,可以直接定位到当前值是否

ZOJ ACM 2022(JAVA)

题目描述请参考:ZOJ ACM 2022 1)难点分析 是大数阶乘的延伸.如果要通过计算大数阶乘的方式来计算末尾0的位数,时间效率远远无法满足2秒的要求. 2)解决方法 通过结果的规律来进行运算.设定计算N的阶乘的结果末尾为0的位数.其中N=N*(N-1)*....*i*....*1,尾数为0的尾数为zeroNumber. 首先,只有当i为5的倍数时,i*2必然个位数为0: 其次,当i为5的k次方时,i*(2的k次方) = (5*2)的k次方,所以必然末尾有k个0.由于是阶乘运算,5的k次方,必

ZOJ ACM 1610(JAVA)

题目描述:ZOJ ACM 1610 题目并不难,但是我在提交时总是提示runtime error. 原因应该是因为我对数组的处理不够严谨,出现了-1的情况,所以才会报错的吧. public class Main { public static void main(String argv[]) { java.util.Scanner scanner = new java.util.Scanner(System.in); while(scanner.hasNext()) { int lines =

ZOJ ACM 2060(JAVA)

题目描述请参考:ZOJ ACM 2060 1)难度分析 由于N较大,为1000000,如果用递归中规中矩的计算结果后再判断是否被3整除肯定超时且费内存. 2)解决方法 f(0) %3 = 1; f(1) %3 = 2; f(2) % 3 = 0;... 通过简单观察,可以发现这是有规律的,因为3比较小,所以并不需要太久即可完成一个循环.从而根据N直接判断是否可被3整除. 结果如下: f(0) % 3 = 1;  f(1) % 3 = 2;  f(2) % 3 = 0;  f(3) % 3 = 2

ZOJ ACM 1204 (JAVA)

毕业好几年了,对算法还是比较有兴趣,所以想重新开始做ACM题.俺做题比较随意,一般先挑通过率高的题来做. 第1204题,具体描述请参考,ZOJ ACM 1204 1)难度分析 这个题目,主要的难度在于要根据长度来排序. 比如1 2 3 4 5 6,结果必须为: 1+2=3 1+3=4 1+4=5 1+5=6 2+3=5 2+4=6 1+2+3=6 但是我的结果为: 1+2=3 1+2+3=6 1+3=6 ... 2)解决方法 将结果缓存,根据长度排序后再打印. 3)AC的源码.如果要直接提交,请

ACM之Java输入输出

一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多OJ系统做的是非常之垃圾 3. 有些OJ上的题目会直接将OI上的题目拷贝过来,所以即便是题目中有输入和输出文件,可能也不需要,因为在OJ系统中一般是采用标准输入输出,不需要文件 4. 在有多行数据输入的情况下,一般这样处理, static Scanner in = new Scanner(System.in); w

ACM中Java高效输入输出封装

来自互联网 : 既高效又好用才是王道! import java.io.IOException; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StreamTokenizer; import jav