**8.36(拉丁方阵)拉丁方阵是一个n*n的数组,其中有n个不同的拉丁字母,并且每个拉丁字母恰好只在每行和每列中出现一次

  • 题目
    • 题目描述与运行示例
    • 破题
  • 代码

题目

题目描述与运行示例

**8.36(拉丁方阵)拉丁方阵是一个n*n的数组,其中有n个不同的拉丁字母,并且每个拉丁字母恰好只在每行和每列中出现一次。
编写一个程序,提示用户输入数字n和字符数组,如示例输出所示,检测该输出数组是否是一个拉丁方阵。字符是从A开始的前面n个字符

Enter a 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 square
Enter a number n: 3
Enter 3 rows of letters separated by spaces:
A F D
Wrong input: the letters must be from A to C

破题

  1. 输出提示长度输入语句并从控制台获取,赋值给int对象n
  2. 声明二维数组,长度为n*n
  3. 新建一个int型对象,赋值为65+n(规定输入范围)
  4. 输出提示语句,新建一个String型对象用于临时保存
  5. 遍历空二维数组,将输入数据转为int型判断是否合法再赋值
  6. 两次遍历二维String型数组,元素强转为int型,作为一维数组下标,判断是否重复
  7. 根据结果输出

代码

import java.util.Arrays;
import java.util.Scanner;public class Test8_36 {public static void main(String[] args) {//1. 输出提示长度输入语句并从控制台获取,赋值给int对象nScanner input = new Scanner(System.in);System.out.print("Enter a number n: ");int n = input.nextInt();//2. 声明二维数组,长度为n*nint[][] arr = new int[n][n];//3. 新建一个int型对象,赋值为65+n(规定输入范围)int limit_max = 65 + n;//4. 输出提示语句,新建一个String型对象用于临时保存System.out.println("Enter "+ n + " rows of letters separated by spaces: ");char temp_str;int temp_int = 0;//5. 遍历空二维数组,将输入数据转为int型判断是否合法再赋值for (int i = 0 ; i < n ; i++){for (int j = 0 ; j < n ; j++){temp_str = input.next().charAt(0);temp_int = (int) temp_str;if (temp_int >= 65 && temp_int < limit_max){arr[i][j] = temp_int;} else {System.out.println("Wrong input: the letters must be from A to " + (char)(limit_max - 1));return;}}}//6. 两次遍历二维数组,元素作为一维数组下标,判断是否重复+7. 根据结果输出int[] count = new int[65 + n];for (int i = 0 ; i < n ; i++){Arrays.fill(count, 0);for (int j = 0 ; j < n ; j++){if (count[arr[i][j]] == 0){++count[arr[i][j]];} else {System.out.println("The input array is not Latin square");return;}}}for (int j = 0 ; j < n ; j++){Arrays.fill(count, 0);for (int i = 0 ; i < n ; i++){if (count[arr[i][j]] == 0){++count[arr[i][j]];} else {System.out.println("The input array is not Latin square");return;}}}System.out.println("The input array is Latin square");}
}

Java黑皮书课后题第8章:**8.36(拉丁方阵)拉丁方阵是一个n*n的数组,其中有n个不同的拉丁字母,并且每个拉丁字母恰好只在每行和每列中出现一次。编写一个程序,提示用户输入数字n和字符数组相关推荐

  1. Java黑皮书课后题第10章:*10.1(Time类)设计一个名为Time的类。编写一个测试程序,创建两个Time对象(使用new Time()和new Time(555550000))

    Java黑皮书课后题第10章:*10.1设计一个名为Time的类.编写一个测试程序,创建两个Time对象 题目 程序 代码 Test1.java Test1_Time.java 运行结果 UML 题目 ...

  2. Java黑皮书课后题第9章:*9.6(秒表)设计一个名为StopWatch的类,该类包含……。编写一个测试程序,用于测量使用选择排序对100000个数字进行排序的执行时间

    Java黑皮书课后题第9章:*9.6(秒表)设计一个名为StopWatch的类,该类包含--.编写一个测试程序,用于测量使用选择排序对100000个数字进行排序的执行时间 题目 破题 代码 Test6 ...

  3. Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt(100)方法显示0到100之间的前50个随机整数

    Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt方法显示0到100之间的前50个随机整数 题目 赘述 代码 题目 ...

  4. Java黑皮书课后题第9章:*9.3(使用Date类)编写程序创建一个Date对象,设置它的流逝时间分别为...,然后使用toString()方法分别显示上述日期

    Java黑皮书课后题第9章:*9.3(使用Date类)编写程序创建一个Date对象,设置它的流逝时间分别为...,然后使用toString方法分别显示上述日期 题目 代码 思路 代码 题目 代码 思路 ...

  5. Java黑皮书课后题第1章:1.12(以千米计的平均速度)假设一个跑步者1小时40分35秒跑了24英里。编写一个程序显示以每小时为多少千米为单位的平均速度值(1英里等于1.6千米)

    Java黑皮书课后题第1章:1.12(以千米计的平均速度) 题目 题目描述 破题 代码块 修改日志 题目 题目描述 1.12(以千米计的平均速度)假设一个跑步者1小时40分35秒跑了24英里.编写一个 ...

  6. Java黑皮书课后题第1章:*1.11(人口估算)编写一个程序,显示未来5年的每年人口数。假设当前的人口是312 032 486,每年有365天

    Java黑皮书课后题第1章:*1.11(人口估算) 题目 题目描述 破题 代码块 方法评析 为什么print函数内的表达式不能分开 修改日志 题目 题目描述 *1.11(人口估算)编写一个程序,显示未 ...

  7. Java黑皮书课后题第1章:1.7(求π的近似值)编写程序,显示4*(1-1/3+1/5-1/7+1/9-1/11【+1/13】)

    Java黑皮书课后题第1章:1.7(求π的近似值) 题目描述 代码 代码块 评析 修改日志 题目描述 可以使用以下公式计算π: [手动空格]π=4*(1-1/3+1/5-1/7+1/9-1/11+-) ...

  8. Java黑皮书课后题第1章:1.6(数列求和)编写程序,显示1+2+3+4+5+6+7+8+9的结果

    Java黑皮书课后题第1章:1.6(数列求和) 题目 题目描述 槽点 代码 代码块 区分println(x)与println("x") 法1法2选用 修改日志 题目 题目描述 1. ...

  9. Java黑皮书课后题第1章:1.5(计算表达式)编写程序,显示以下式子的结果

    Java黑皮书课后题第1章:1.5(计算表达式) 题目 题目描述 题目槽点 代码 代码块 代码评析与易错点 方法选用 易错点 非常不舒服的运算符前后空格(对新手来讲) 修改日志 题目 题目描述 编写程 ...

最新文章

  1. win10双屏让任务栏显示不相同的方法
  2. Ionic css组成(三)
  3. Android 程序适应多种多分辨率
  4. linux改英语环境,CentOS6.8中/英文环境切换教程图解
  5. 全球及中国冠状动脉内支架行业运行现状与十四五发展状况分析报告2022版
  6. 随机数排列JAVA_随机数生成器,按排序顺序
  7. java动态定义泛型_关于oop:具有动态性质且可完全自定义的Java泛型编程
  8. 进入正在运行状态中的Docker容器
  9. 领域应用 | 知识图谱数据构建的“硬骨头”,阿里工程师如何拿下?
  10. 数据结构之树【完善中】
  11. 2018蓝桥模拟赛(一) 数独(dfs)
  12. Eclipse 导入外部jar包
  13. Ubuntu开机直接进入tty1,无法直接进入的图形化界面的解决方法
  14. 【转】推荐几个免费下载破解软件的网站以及系统
  15. linux 配置局域网内部www服务器,局域网内部邮件服务器搭建方法
  16. opencv训练自己的模型,实现特定物体的识别
  17. python 字符串前面加 u, r, b的含义
  18. 抖音60秒视频权限开通方法
  19. 手柄摇杆控制角色移动
  20. XML的两种常见格式

热门文章

  1. nginx 重定向_虚拟机中安装nginx,重定向到resin
  2. 外部工具连接SaaS模式云数据仓库MaxCompute实战:商业BI分析工具篇
  3. 开发效率提升15倍!批流融合实时平台在好未来的应用实践
  4. 联合利华搭上阿里云数据中台 精准营销新客提升2倍
  5. 媒体声音 | 憋了这么久,阿里云数据库再放大招
  6. 如何用智能有效感知城市?城市大脑三大AI产品来了
  7. 加速 VR 渲染地狱难度进阶篇:降低图形 API 调用次数
  8. vSphere 计算vMotion的迁移原理
  9. No-5.变量的命名
  10. Linux CenOS Python3 和 python2 共存