(拉丁正方形)拉丁正方形是一个 nXn 的数组,由 n 个不同的拉丁字母填充,每个拉丁字母恰好 只在每行和每列中出现一次。编写一个程序,提示用户输人数字 n 以及字符数组,如示例输出 所示,检测该输出数组是否是一个拉丁正方形。字符是从 A 开始的前面 n 个字符。
package com.open.lab;
import java.util.Scanner;
public class Demo5_14 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number n:");
int n = sc.nextInt();
if (n == 0) {
System.out.println("WRONG INPUT");
}
char[][] arr = new char[n][n];
System.out.println("Enter " + n + " rouws of letters separated by spaces:");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
arr[i][j] = sc.next().charAt(0);
}
}
isLatin(arr);
}
private static void isLatin(char[][] arr) {
if (exist(arr)) {
int[] count = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
count[i]+=arr[i][j] - 'A';
}
}
int[] sum = new int[arr[0].length];
for (int j = 0; j < arr[0].length; j++) {
for (int i = 0; i < arr.length; i++) {
sum[j]+=arr[i][j] - 'A';
}
}
for (int i = 0; i < sum.length; i++) {
if (sum[i] != add1(sum) || count[i] != add1(count)) {
System.out.println("The input array is NOT a Latin square");
return;
}
System.out.println("The input array is a Latin square");
return;
}
}else {
System.out.println("WRONG INPUT :MUST BE" + " A" + " to" + (char) ('A' + arr.length - 1));
}
}
private static int add1(int[] sum) {
int he = 0;
for(int n = sum.length-1;n>=0;n--){
he=he+n;
}
return he;
}
private static boolean exist(char[][] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
if (arr[i][j] < 'A' || arr[i][j] > (char)('A' + arr.length - 1)) {
return false;
}
}
}
return true;
}
}