JAVA:(拉丁正方形)

问题描述:

拉丁正方形是一个 n*n 的数组,由 n 个不同的拉丁字母填充,每个拉丁字母恰好只在每行和每列中出现一次。编写一个程序,提示用户输入数字 n 以及字符数组,如示例输出所示,检测该输出数组是否是一个拉丁正方形。字符是从 A 开始的前面n 个字符。
JAVA:(拉丁正方形)_第1张图片

代码:


import java.util.Scanner;

public class Test36 {
	static Scanner in = new Scanner(System.in);
	
	public static void main(String[] args) {
		System.out.print("Enter number n:");
		int size = Integer.parseInt(in.nextLine());
		char[][] arr = new char[size][size];
		if(creatArr(arr,size))
		{
			if(isLatinSquare(arr))
				System.out.println("The input array is a Latin square");
			else
				System.out.println("The input array is not a Latin square");
		}
		
		in.close();
	}

	
	public static boolean creatArr(char[][] arr,int size)
	{
		System.out.printf("Enter %d rows of letters separated by spaces:\n",size);
		for(int i = 0; i < size; i++)
			for(int j = 0; j < size; j++)
			{
				arr[i][j] = in.next().charAt(0);
				if(arr[i][j] > 'A'+size-1 || arr[i][j] < 'A') 
				{
					System.out.println("Wrong input: the letters must be from A to "+(char)('A'+size-1));
					return false;
				}
			}
		return true;
	}
	
	
	public static boolean isLatinSquare(char[][] arr)
	{
		for(int i = 0; i < arr.length; i++)
			if(judgeRow(arr[i]) != true)
				return false;
		if(judgeCol(arr) != true)
			return false;
		return true;
	}
	
	
	public static boolean judgeRow(char[] arr)
	{
		for(int i = 0; i < arr.length; i++)
			for(int j = i + 1; j < arr.length; j++)
			{
				if(arr[i] == arr[j])
					return false;
			}
		return true;
	}
	
	
	public static boolean judgeCol(char[][] arr)
	{
		for(int col = 0; col < arr.length; col++)
		{
			for(int row = 0; row < arr.length - 1; row++)
			{
				for(int i = row + 1; i < arr.length; i++)
					if(arr[row][col] == arr[i][col])
						return false;
			}
		}
		return true;
	}
}

运行截图:

JAVA:(拉丁正方形)_第2张图片

你可能感兴趣的:(java)