Java基本语法经典例题
文章目录
前言
学习Java基本语法过程中遇到的一些经典例题。
一、求两个正整数的最大公约数和最小公倍数
1.1 获取最大公约数
- 解题思路
两个正整数的最大公约数一定不会大于它们之中较小的那个数,所以只需要用for倒着遍历一遍较小的那个数,求出能够被这两个数整除的数,即是我们要求的最大公约数。 - 下面贴代码
//1.得到两个数中较小的那个数
int min = (m < n) ? m : n;
//2.获取最大公约数
for(int i = min; i > 0; i--) {
if(m % i == 0 && n % i == 0) {
System.out.println("最大公约数为:" + i);
break;
}
}
1.2 获取最小公倍数
- 解题思路
求两个正整数的最小公倍数,与求最大公约数类似,其最小公倍数一定不会小于它们之中较大的那个数,所以只用从较大的那个数开始遍历,求出能够同时整除两个正整数的数,即是我们要求的最小公倍数。 - 下面贴代码
//1.得到两个数中较大的数
int max = (m > n) ? m : n;
//2.获取最小公倍数
for(int i = max; i >= max; i++) {
if(i % m == 0 && i % n == 0) {
System.out.println("最小公倍数为:" + i);
break;
}
}
1.3 完整代码
//1.获取键盘输入
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个正整数m:");
int m = scan.nextInt();
System.out.println("请输入第二个正整数n:");
int n = scan.nextInt();
//2.得到两个数的大小
int min = (m < n) ? m : n;
int max = (m > n) ? m : n;
//3.获取最大公约数
for(int i = min; i > 0; i--) {
if(m % i == 0 && n % i == 0) {
System.out.println("最大公约数为:" + i);
break;
}
}
//4.获取最小公倍数
for(int i = max; i >= max; i++) {
if(i % m == 0 && i % n == 0) {
System.out.println("最小公倍数为:" + i);
break;
}
}
二、打印九九乘法表
- 解题思路
九九乘法表,每一行都比前一行多一项,并且按顺序打印出乘法表中内容,即用两层for嵌套,第一层for用来控制打印的行数,第二层for用来打印当前行的所有项。 - 下面贴代码
for(int i = 1; i <=9; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + i * j + " ");
}
System.out.println();
}
三、求指定范围内的所有质数
3.1 解题思路
- 质数:指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
- 使用两层for嵌套循环,第一层for用来遍历范围内的所有数,第二层for遍历当前数范围内的所有数,看是否有能被当前数整除的自然数,如果有,则不为质数,反之则为质数。
- 优化:完整的两层for时间复杂度太大,可以对数的范围进行缩减,如质数不可能是偶数;不用遍历完当前待判定数范围内的所有数,判断有能整除的自然数即停止;将当前待判定数的范围缩到Math.sqrt(i),数学证明可自行搜索。
3.2 完整代码
public static void primeNumber() {
//两层for解决,优化
long start = System.currentTimeMillis(); //获取当前时间
int count = 0;
label: for(int i = 2; i <= 100000; i++){
for(int j = 2; j < Math.sqrt(i); j++) { //优化2: Math.sqrt(i)
if(i % j == 0){
//break; //优化1,需要加一个标志判断
continue label; //优化3,去除了优化1的标志判断
}
}
count++;
}
long end = System.currentTimeMillis(); //获取当前时间
System.out.println(count);
System.out.println(end - start + "ms");
}
总结
以上是在学习Java基本语法过程中遇到的一些经典题目,题目难度较低,但对于初学者来说是能够很好的锻炼写代码能力和测试对基本语法掌握的程度的题目。后面也会继续更新学习Java过程中遇到的经典题目,其难度不一。