一
题目:给一个不多于5位的正整数。要求:一、逆序打印出各位数字。二、求它是几位数。
import java.util.Scanner;
/**
* @Auther: admin
* @Date: 2022/10/4 15:01
* @Description: 题目:给一个不多于5位的正整数。要求:一、逆序打印出各位数字。二、求它是几位数。
*/
public class Practice01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int number = scanner.nextInt();
reversePrint(number);
getDigits(number);
}
/**
* 一、逆序打印出各位数字
* 递归输出
*
* @param num
*/
static void reversePrint(int num) {
System.out.print(num % 10 + " ");
if (num > 10) reversePrint(num / 10);
}
/**
* 二、求它是几位数。
* 利用log10函数 获取位数
*
* @param num
*/
static void getDigits(int num) {
System.out.println("你输入的是一个" + ((int) Math.log10(num) + 1) + "位数");
}
}
二
题目:输出1000以内将一个正整数分解质因数。
/**
* @Auther: admin
* @Date: 2022/10/4 15:01
* @Description: 题目:输出1000以内将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
*/
public class Practice02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个1000以内的正整数:");
int number = scanner.nextInt();
decPriFactor(number);
}
static void decPriFactor(int num) {
System.out.print(num + "=");
ArrayList<String> strings = new ArrayList<>();
for (int i = 2; i <= num;) {
// 如果 为素数 且 能被整除
if (isPrime(i) && num % i == 0) {
// 转为String类型 添加到链表中
strings.add(String.valueOf(i));
num /= i;
// 重置为 2
i = 2;
}else{
i++;
}
}
// join: 以 * 间隔 合并数组中的字符串
String res = String.join("*", strings);
System.out.println(res);
}
/**
* 判断num是否为素数
* @param num
* @return
*/
static boolean isPrime(int num) {
for (int i = 2; i < num / 2; i++)
if (num % i == 0) return false;
return true;
}
}
三
题目:从键盘输入一个整数(1~20),则以该数字为矩阵的大小,把1,2,3.n*n的数字按照顺时针螺旋的形式填入其中。
/**
* @Auther: admin
* @Date: 2022/10/4 15:26
* @Description: 从键盘输入一个整数(1~20),则以该数字为矩阵的大小,
* 把1,2,3...n*n 的数字按照顺时针螺旋的形式填入其中
*/
public class Practice03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个1~20之间的数字:");
int n = scanner.nextInt();
clockwise(n);
counterclockwise(n);
}
/**
* 顺时针
* @param n
*/
static void clockwise(int n) {
int[][] res = new int[n][n];
int k = 1;
for (int i = 0, j; i <= n / 2; i++) {
// top
for (j = i; j < n - i; j++) {
res[i][j] = k++;
}
// right
for (j = i + 1; j < n - i; j++) {
res[j][n - i - 1] = k++;
}
// bottom
for (j = n - i - 2; j >= i; j--) {
res[n - i - 1][j] = k++;
}
// left
for (j = n - i - 2; j > i; j--) {
res[j][i] = k++;
}
}
print(res);
}
/**
* 逆时针
* @param n
*/
static void counterclockwise(int n) {
int[][] res = new int[n][n];
int k = 1;
for (int i = 0, j; i <= n / 2; i++) {
// left
for (j = i; j < n - i; j++) {
res[j][i] = k++;
}
// bottom
for (j = i + 1; j < n - i; j++) {
res[n - i - 1][j] = k++;
}
// right
for (j = n - i - 2; j > i; j--) {
res[j][n - i - 1] = k++;
}
// top
for (j = n - i - 1; j > i; j--) {
res[i][j] = k++;
}
}
print(res);
}
/**
* 按格式打印二维数组 m
*
* @param m
*/
static void print(int m[][]) {
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++)
System.out.printf("%4d", m[i][j]);
System.out.println();
}
}
}
四
需求:我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。为了出国交流,跟乒乓球相关的人员都需要学习英语。请用所学知识分析,这个案例中有哪些具体类,哪些抽象类,哪些接口,并用代码实现。
链接