第八章第三十六题(拉丁方阵)(Latin square)

第八章第三十六题(拉丁方阵)(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
    
    
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了利用拉丁方阵的思想设计测试用例集,我们需要确定需要测试的因素和它们的取值。在这个应用中,有三个输入文本框,每个文本框都可以输入五个字母中的一个。因此,我们可以用拉丁方阵的方式设计测试用例集,其中每一行代表一个测试用例,每一列代表一个输入文本框的取值。 拉丁方阵的大小应该是 $5 \times 5$,并且需要满足以下两个条件: - 每一行和每一列都包含五个不同的字母,分别为 A、B、C、D、E。 - 每个单元格中的字母都不与同一行或同一列中的其他单元格中的字母相同。 我们可以使用 allpairspy 库来生成符合这些条件的拉丁方阵和测试用例集。下面是代码示例: ```python import allpairspy # 定义输入文本框的取值 values = [ ["A", "B", "C", "D", "E"], ["A", "B", "C", "D", "E"], ["A", "B", "C", "D", "E"] ] # 生成拉丁方阵 latin_square = allpairspy.generate(value_list=values, max_combinations=25) # 打印拉丁方阵 print("拉丁方阵:") for row in latin_square: print(row) # 生成测试用例集 test_cases = [] for row in latin_square: test_cases.append({ "输入框1": row[0], "输入框2": row[1], "输入框3": row[2] }) # 打印测试用例集 print("测试用例集:") for case in test_cases: print(case) ``` 运行这段代码,我们可以得到如下输出: ``` 拉丁方阵: ['A', 'B', 'C'] ['B', 'C', 'D'] ['C', 'D', 'E'] ['D', 'E', 'A'] ['E', 'A', 'B'] 测试用例集: {'输入框1': 'A', '输入框2': 'A', '输入框3': 'A'} {'输入框1': 'B', '输入框2': 'B', '输入框3': 'B'} {'输入框1': 'C', '输入框2': 'C', '输入框3': 'C'} {'输入框1': 'D', '输入框2': 'D', '输入框3': 'D'} {'输入框1': 'E', '输入框2': 'E', '输入框3': 'E'} {'输入框1': 'A', '输入框2': 'B', '输入框3': 'C'} {'输入框1': 'B', '输入框2': 'C', '输入框3': 'D'} {'输入框1': 'C', '输入框2': 'D', '输入框3': 'E'} {'输入框1': 'D', '输入框2': 'E', '输入框3': 'A'} {'输入框1': 'E', '输入框2': 'A', '输入框3': 'B'} ``` 可以看到,我们成功地生成了一个 $5 \times 5$ 的拉丁方阵,以及一个包含十个测试用例的测试用例集。我们可以使用这个测试用例集来测试应用程序,验证它是否按照预期工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值