第八章第三十六题(拉丁方阵)(Latin square)
-
**8.36(拉丁方阵)拉丁方阵是一个nxn的数组,其中有n个不同的拉丁字母,并且每个拉丁字母恰好只在每行和每列中出现一次。编写一个程序,提示用户输入数字n以及字符数组,如示例输出所示,检测该输出数组是否是一个拉丁方阵。字符是从A开始的前面n个字符。
Enter number n:4
Enter 4 rows of letters separated by spaces:
A B C D
B A D C
C D B A
D C A B
The input array is Latin squre
Enter number n:3
Enter 3 rows of letters separated by spaces:
A F D
Wrong input: the letters must be from A to C
**8.36(Latin square)A Latin square is an array of NxN with n different Latin letters, and each Latin letter appears exactly once in each row and column. Write a program to prompt the user to input the number N and character array. As shown in the sample output, check whether the output array is a Latin square matrix. The character is the first n characters starting from a.
Enter number n:4
Enter 4 rows of letters separated by spaces:
A B C D
B A D C
C D B A
D C A B
The input array is Latin squre
Enter number n:3
Enter 3 rows of letters separated by spaces:
A F D
Wrong input: the letters must be from A to C -
参考代码:
package chapter08; import java.util.Arrays; import java.util.Scanner; public class Code_36 { public static void main(String args[]){ System.out.print("Enter number n:"); Scanner cin = new Scanner(System.in); int n = cin.nextInt(); char[][] matrix = new char[n][n]; System.out.println("Enter " + n + " rows of letters separated by spaces:"); String temp = null; for(int i = 0; i < n; ++i){ int count = 0; for(int j = 0; j < n; ++j){ temp = cin.next(); matrix[i][j] = temp.charAt(0); if (matrix[i][j] > ('A' + n) || matrix[i][j] < 'A') count++; } if (count != 0) { System.out.println("Wrong input: the letters must be from A to C"); return; } } int[] record = new int[n]; Arrays.fill(record, 0); for(int i = 0; i < n; ++i){ for(int j = 0; j < n; ++j){ ++record[(int)(matrix[i][j]-'A')]; } } for(int i = 0; i < n; ++i){ for(int j = 0; j < n; ++j){ ++record[(int)(matrix[j][i] - 'A')]; } } boolean flag = true; for(int i = 0; i < n; ++i){ if(record[i] != 2 * n){ flag = false; } } if (flag) System.out.println("The input array is Latin squre"); } }
-
结果显示:
Enter number n:3 Enter 3 rows of letters separated by spaces: A F D Wrong input: the letters must be from A to C Process finished with exit code 0