首页 > 试题广场 >

(拉丁正方形)拉丁正方形是一个 nXn 的数组,由 n 个不

[问答题]
(拉丁正方形)拉丁正方形是一个 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;
    }
}

发表于 2022-03-20 21:58:25 回复(0)