JavaSE39道基础练习题
2021/7/21 9:36:40
本文主要是介绍JavaSE39道基础练习题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JavaSE 39道基础练习题
- JavaSE 39道基础练习题
- 1、斐波那契数列
- 2、素数
- 3、水仙花数
- 4、分解质因数
- 5、成绩等级
- 6、最大公因数和最小公倍数
- 7、统计字符
- 8、求 s=a+aa+aaa+aaaa+aa...a
- 9、完数
- 10、自由落体
- 11、组合排序
- 12、企业利润
- 13、特殊完全平方数
- 14、天数计算
- 15、三数比较大小
- 16、9*9口诀
- 17、猴子偷桃
- 18、乒乓球队
- 19、打印菱形
- 20、序列求和
- 21、20 阶乘求和
- 22、递归求阶乘
- 23、递归求年龄
- 24、数字位数和逆序打印
- 25、回文数
- 26、排序
- 27、求一个n*n矩阵对角线元素之和
- 28、插入指定值到排序好的数组
- 29、杨辉三角形
- 30、最大最小元素交换
- 31、移动 m 个数
- 32、报数
- 33、字符串排序
- 34、猴子分桃
- 35、求 0-7 所能组成的奇数个数
- 36、偶数表示为两个素数之和
- 37、公司数据加密
- 38、计算字符串中子串出现的次数
- 39、二分法查找指定元素
JavaSE 39道基础练习题
本篇文章是为了帮助学习 Java 基础的程序猿,希望大家可以练习一下,代码都是我自己敲的,希望大家能有自己的程序思想,不足之处还请海涵。
1、斐波那契数列
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21…,即为斐波那契数列。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static int fun(int n) { if (n == 1 || n == 2) return 1; else return fun(n - 1) + fun(n - 2); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int mouth = scanner.nextInt(); int rabbit = fun(mouth); System.out.println(rabbit); } }
2、素数
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除 2 到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
package com.Pract; public class LianXi50 { public static void fun(int n, int m) { int count = 0; while (n <= m) { int i = 2; for (i = 2; i < (int) Math.sqrt(n); i++) { if (n % i == 0) break; } if (i == (int) Math.sqrt(n)) { count++; System.out.print(n + " "); } n++; } System.out.println("\n" + count); } public static void main(String[] args) { fun(101, 200); } }
3、水仙花数
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用 for 循环控制100-999个数,每个数分解出个位,十位,百位。
package com.Pract; public class LianXi50 { public static int shuxianhua(int n) { int sum = 0; while (n != 0) { sum += Math.pow(n % 10, 3); n /= 10; } return sum; } public static void fun() { int i = 100; while (i < 1000) { if (shuxianhua(i) == i) System.out.print(i + " "); i++; } } public static void main(String[] args) { fun(); } }
4、分解质因数
题目:将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int n) { int k = 0; for (int i = 2; i < n; i++) { if (n % i == 0) { k = i; break; } } String str = n + "="; while (k < n) { if (n % k == 0) { str += k + "*"; n /= k; } else { k++; } } char[] c = str.toCharArray(); String str2 = new String(c, 0, c.length - 1); System.out.println(str2); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); fun(scanner.nextInt()); } }
5、成绩等级
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:(a>b)?a:b这是条件运算符的基本例子。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int grade) { System.out.println(grade >= 90 ? 'A' : grade >= 60 ? 'B' : 'C'); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (true) { fun(scanner.nextInt()); } } }
6、最大公因数和最小公倍数
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:利用辗除法。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int m, int n) { int a = m; int b = n; int gys = 0; if (a > b) { int t = a; a = n; b = t; } if (b % a == 0) gys = b; while (a != 0) { int t = a; a = b % a; b = t; } gys = b; int gbs = m * n / gys; System.out.println(gys + " " + gbs); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (true) { fun(scanner.nextInt(), scanner.nextInt()); } } }
7、统计字符
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:利用while语句,条件为输入的字符不为’\n’.
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(String str) { int ec = 0; int sc = 0; int dc = 0; int oc = 0; for (char c : str.toCharArray()) { if ('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z') ec++; else if (c == ' ') sc++; else if ('0' <= c && c <= '9') dc++; else oc++; } System.out.println(ec + " " + sc + " " + dc + " " + oc); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); fun(scanner.nextLine()); } }
8、求 s=a+aa+aaa+aaaa+aa…a
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222=24690(此时共有5个数相加),几个数相加有键盘控制。
程序分析:关键是计算出每一项的值。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int a, int b) { int sum1 = 0; int sum2 = 0; int i = 0; int t = a; while (i < b) { t = a * (int) Math.pow(10, i); sum1 += t; sum2 += sum1; i++; } System.out.println(sum2); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); fun(scanner.nextInt(), scanner.nextInt()); } }
9、完数
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
package com.Pract; public class LianXi50 { public static int wanshu(int n) { int sum = 0; for (int i = 1; i < n; i++) { if (n % i == 0) sum += i; } return sum; } public static void fun() { for (int i = 2; i <= 1000; i++) { if (wanshu(i) == i) System.out.print(i + " "); } } public static void main(String[] args) { fun(); } }
10、自由落体
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
程序分析:等比数列
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int n) { double a = 100 * Math.pow(0.5, n - 1); double s = 100 * (1 - Math.pow(0.5, n)) / (1 - 0.5); System.out.println(a + " " + (s * 2 - 100)); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); fun(scanner.nextInt()); } }
11、组合排序
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
package com.Pract; public class LianXi50 { public static void fun() { for (int i = 1; i < 5; i++) { for (int j = 1; j < 5; j++) { if (i == j) continue; for (int k = 1; k < 5; k++) { if (k == j || i == k) continue; System.out.print(i + "" + j + "" + k+" "); } } } } public static void main(String[] args) { fun(); } }
12、企业利润
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,低于20万元的部分按10%提成,高于20万元的部分,可提成5%;40万到60万之间时,低于40万元的部分按10%提成,高于40万元的部分,可提成3%;60万到100万之间时,低于60万元的部分按10%提成,高于60万元的部分,可提成1.5%,高于100万元时,低于100万元的部分按10%提成,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(double n) { double price; n /= 10000; if (n <= 10) price = n * 0.1; else if (n <= 20) price = 10 * 0.1 + (n - 10) * 0.075; else if (n <= 40) price = 20 * 0.1 + (n - 20) * 0.05; else if (n <= 60) price = 40 * 0.1 + (n - 40) * 0.03; else if (n <= 100) price = 60 * 0.1 + (n - 60) * 0.015; else price = 100 * 0.1 + (n - 100) * 0.01; System.out.println(price * 10000); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (true) fun(scanner.nextInt()); } }
13、特殊完全平方数
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?答案为21。
程序分析:先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果均为整数,即是结果。
package com.Pract; public class LianXi50 { public static void fun() { int i = 0; while (true) { double t1 = Math.sqrt(i + 100); double t2 = Math.sqrt(i + 268); if (t1 % 1 != 0 || t2 % 1 != 0) i++; else { System.out.println(i); break; } } } public static void main(String[] args) { fun(); } }
14、天数计算
题目:输入某年某月某日(格式为xxxx.xx.xx),判断这一天是这一年的第几天?
程序分析:建立闰年数组和平年数组。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(String str) { int[] leapYear = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int[] commonYear = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; String[] date = str.split("\\."); // 注意转义字符 int year = Integer.valueOf(date[0]); int mouth = Integer.valueOf(date[1]); int day = Integer.valueOf(date[2]); for (int m = 0; m < mouth; m++) { if (year % 4 == 0 && year % 100 != 0) day += leapYear[m]; else day += commonYear[m]; } System.out.println(day); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); fun(scanner.nextLine()); } }
15、三数比较大小
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int... a) { for (int i = 0; i < a.length; i++) { for (int j = i; j < a.length - 1; j++) { if (a[j] > a[j + 1]) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } System.out.println(a[0] + " " + a[1] + " " + a[2]); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); fun(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()); } }
16、9*9口诀
题目:输出9*9口诀。
程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
package com.Pract; public class LianXi50 { public static void fun() { for (int i = 1; i < 10; i++) { for (int j = 1; j < i + 1; j++) System.out.print(i + "*" + j + "=" + (i * j) + " "); System.out.println(); } } public static void main(String[] args) { fun(); } }
17、猴子偷桃
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。
package com.Pract; public class LianXi50 { public static void fun() { int m = 1; for (int i = 1; i < 10; i++) { m = (m + 1) * 2; } System.out.println(m); } public static void main(String[] args) { fun(); } }
18、乒乓球队
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
package com.Pract; public class LianXi50 { public static void fun() { for (char i = 'x'; i <= 'z'; i++) { for (char j = 'x'; j <= 'z'; j++) { if (i != j) { for (char k = 'x'; k <= 'z'; k++) { if (i != k && j != k) { if (i != 'x' && k != 'x' && k != 'z') { System.out.println(i + " " + j + " " + k); } } } } } } } public static void main(String[] args) { fun(); } }
19、打印菱形
题目:输入任意奇数,打印菱形
程序分析:先把图形分成两部分来看待,前n/2+1行和后n/2行。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int n) { int m = n / 2; for (int i = 0; i < m + 1; i++) { for (int j = 0; j < m - i; j++) { System.out.print(" "); } for (int j = 0; j <= i; j++) { System.out.print("* "); } System.out.println(); } for (int i = 0; i < m; i++) { for (int j = 0; j < i + 1; j++) { System.out.print(" "); } for (int j = i; j < m; j++) { System.out.print("* "); } System.out.println(); } } public static void main(String[] args) { fun(new Scanner(System.in).nextInt()); } }
20、序列求和
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
程序分析:请抓住分子与分母的变化规律。
package com.Pract; public class LianXi50 { public static void fun() { double a = 1; double b = 2; int i = 0; double sum = 0; while (++i <= 20) { sum += 1.0 * (b / a); double t = b; b = a + b; a = t; } System.out.println(sum); } public static void main(String[] args) { fun(); } }
21、20 阶乘求和
题目:求1!+2!+3!+…+20!的和
程序分析:此程序只是把累加变成了累乘。
package com.Pract; public class LianXi50 { public static void fun() { int sum = 0; for (int i = 1; i < 21; i++) { int re = 1; for (int j = 1; j <= i; j++) { re *= j; } sum += re; } System.out.println(sum); } public static void main(String[] args) { fun(); } }
22、递归求阶乘
题目:利用递归方法求5!。
程序分析:递归公式:return n*fun(n-1)。
package com.Pract; public class LianXi50 { public static int fun(int n) { if (n == 0) return 1; else return n * fun(n - 1); } public static void main(String[] args) { System.out.println(fun(5)); } }
23、递归求年龄
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
package com.Pract; public class LianXi50 { public static int fun(int n) { if (n == 1) { return 10; } else { return 2 + fun(n - 1); } } public static void main(String[] args) { System.out.println(fun(5)); } }
24、数字位数和逆序打印
题目:给一个正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int n) { int count = 0; while (n != 0) { System.out.print(n % 10); count++; n /= 10; } System.out.println("\n" + count); } public static void main(String[] args) { fun(new Scanner(System.in).nextInt()); } }
25、回文数
题目:判断一个数是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:判断第一个字符和最后一个字符相同,第二个字符与倒数第二个字符相同,以此类推。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(String str) { char[] c = str.toCharArray(); int flag = 1; for (int i = 0; i < c.length / 2; i++) { if (c[i] != c[c.length - 1 - i]) { flag = 0; System.out.println("NO"); break; } } if (flag == 1) System.out.println("YES"); } public static void main(String[] args) { fun(new Scanner(System.in).nextLine()); } }
26、排序
题目:对输入的10个数进行排序。
程序分析:冒泡排序法。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int[] a) { for (int i = 0; i < a.length; i++) { for (int j = 0; j < a.length - 1 - i; j++) { if (a[j] > a[j + 1]) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } for (int i : a) { System.out.print(i + " "); } } public static void main(String[] args) { int[] a = new int[10]; for (int i = 0; i < 10; i++) { a[i] = new Scanner(System.in).nextInt(); } fun(a); } }
27、求一个n*n矩阵对角线元素之和
题目:求一个n*n矩阵对角线元素之和
程序分析:利用双重for循环控制输入二维数组,再将a[i][j]累加后输出。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int[][] a) { int sum = 0; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a.length; j++) { if (i == j || j == a.length - 1 - i) { sum += a[i][j]; } } } System.out.println(sum); } public static void main(String[] args) { int n = new Scanner(System.in).nextInt(); int[][] a = new int[n][n]; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a.length; j++) { a[i][j] = j + 1; } } fun(a); } }
28、插入指定值到排序好的数组
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int[] a, int n) { int re = 0; for (int i = a.length - 1; i >= 0; i--) { if (n > a[i]) { re = i; break; } } int[] b = new int[a.length + 1]; b[re + 1] = n; for (int i = 0; i < re + 1; i++) { b[i] = a[i]; } for (int i = a.length - 1; i > re; i--) { b[i + 1] = a[i]; } for (int i : b) { System.out.print(i + " "); } } public static void main(String[] args) { int n = new Scanner(System.in).nextInt(); int[] a = {1, 2, 3, 4, 5, 6, 7}; fun(a, n); } }
29、杨辉三角形
题目:打印出 n 行杨辉三角形
程序分析:利用二维数组存储每行数据,每行第一项和最后一项都是1,其他每项等于该行的上一行的该项位置 j 加上一项位置 j-1。
com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int n) { int triangle[][] = new int[n][]; for (int i = 0; i < n; i++) { triangle[i] = new int[i + 1]; for (int j = 0; j < n - 1 - i; j++) { System.out.print(" "); } for (int j = 0; j < triangle[i].length; j++) { if (i == 0 || j == 0 || j == triangle[i].length - 1) { triangle[i][j] = 1; } else { triangle[i][j] = triangle[i - 1][j] + triangle[i - 1][j - 1]; } System.out.print(triangle[i][j] + " "); } System.out.println(); } } public static void main(String[] args) { int n = new Scanner(System.in).nextInt(); fun(n); } }
30、最大最小元素交换
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
package com.Pract; public class LianXi50 { public static void fun(int[] a) { for (int i = 0; i < a.length; i++) { if (a[i] > a[0]) { int t = a[i]; a[i] = a[0]; a[0] = t; } } for (int i = 0; i < a.length; i++) { if (a[a.length - 1] > a[i]) { int t = a[i]; a[i] = a[a.length - 1]; a[a.length - 1] = t; } } for (int i : a) { System.out.print(i + " "); } } public static void main(String[] args) { int[] a = {10, 1, 2, 8, 4, 5, 6, 7}; fun(a); } }
31、移动 m 个数
题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int[] a, int m) { int[] b = new int[a.length]; for (int i = 0; i < m; i++) { b[i] = a[a.length - m + i]; } for (int i = 0; i < a.length - m; i++) { b[m + i] = a[i]; } for (int i : b) { System.out.print(i + " "); } } public static void main(String[] args) { int n = new Scanner(System.in).nextInt(); int[] a = new int[n]; int m = new Scanner(System.in).nextInt(); for (int i = 0; i < n; i++) { a[i] = i; } fun(a, m); } }
32、报数
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int[] a,int m) { int k = 0; for (int i = 0; i < a.length; i++) { for (int j = 0; j < m; j++) { if (k == a.length) { k = 0; } if (a[k] == 1) { j--; } k++; } k--; a[k] = 1; } System.out.println(k + 1); } public static void main(String[] args) { int n = new Scanner(System.in).nextInt(); int[] a = new int[n]; int m = new Scanner(System.in).nextInt(); for (int i = 0; i < n; i++) { a[i] = 0; } fun(a,m); } }
33、字符串排序
题目:字符串排序。(字典顺序排序)
package com.Pract; public class LianXi50 { public static void fun(String[] str) { for (int i = 1; i < str.length; i++) { for (int j = 0; j < str.length - i; j++) { if (str[j].compareTo(str[j + 1]) > 0) { String strings = str[i]; str[i] = str[i + 1]; str[i + 1] = strings; } } } for (String s : str) { System.out.print(s + " "); } } public static void main(String[] args) { String[] str = {"789", "wer", "123", "zxcxvcv", "456", "sddff"}; fun(str); } }
34、猴子分桃
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int n) { int res = 1;// 桃子总数,用来控制循环变量增加 int left = 1;// 剩下的桃子数 int count = 0;// 可以分的猴子数 while (true) { System.out.println(left); if ((left - 1) % 5 == 0) { // 可以再分一个猴子 ++count; left = (left - 1) / 5 * 4; } else if (count != n) { // 循环变量加一 left = ++res; count = 0; } if (count == n) { // 满足猴子总数, okay, 找到了 System.out.println(res); break; } } } public static void main(String[] args) { fun(new Scanner(System.in).nextInt()); } }
35、求 0-7 所能组成的奇数个数
题目:求 0-7 所能组成的奇数个数。
程序分析:个位数只有1、3、5、7四个数,除首项外,其他各项都有7种选择,首项有6种选择。
package com.Pract; public class LianXi50 { public static void fun() { int sum = 0; int g = 4; int s = 6; int o = 7; //一位数 sum += g; //二位数 sum += s * g; //三位数 sum += s * o * g; //四位数 sum += s * o * o * g; //五位数 sum += s * o * o * o * g; //六位数 sum += s * o * o * o * o * g; //七位数 sum += s * o * o * o * o * o * g; System.out.println(sum); } public static void main(String[] args) { fun(); } }
36、偶数表示为两个素数之和
题目:一个偶数总能表示为两个素数之和。
程序分析:必须输入偶数,1不是素数,且2不能被表示为两个素数之和。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static boolean isPrime(int n) { if (n == 1) return false; for (int i = 2; i < (int) Math.sqrt(n) + 1; i++) { if (n % i == 0) return false; } return true; } public static void fun(int n) { for (int i = 2; i < n; i++) { if (isPrime(i) && isPrime(n - i)) { System.out.println(i + "+" + (n - i) + "=" + n); break; } } } public static void main(String[] args) { fun(new Scanner(System.in).nextInt()); } }
37、公司数据加密
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
程序分析:逆序输出数组。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(int n) { int[] a = new int[4]; int i = 0; while (n != 0) { a[i] = n % 10 + 5; n /= 10; i++; } for (int j = 0; j < 4; j++) { System.out.print(a[j]); } } public static void main(String[] args) { fun(new Scanner(System.in).nextInt()); } }
38、计算字符串中子串出现的次数
题目:计算字符串中子串出现的次数,即计算空格相隔的字符串个数。
程序分析:利用字符串分割函数即可分隔空格。
package com.Pract; import java.util.Scanner; public class LianXi50 { public static void fun(String string) { String[] str = string.split(" "); System.out.println(str.length); } public static void main(String[] args) { fun(new Scanner(System.in).nextLine()); } }
39、二分法查找指定元素
题目:给一个排序好的数组,利用二分法查找元素。
package com.Pract; public class LianXi50 { public static int erFen(int[] a, int begin, int end, int target) { int mid = (begin + end) / 2; if (begin > end) { return 0; } if (target < a[mid]) return erFen(a, begin, mid, target); else if (target > a[mid]) return erFen(a, mid, end, target); else return mid; } public static void main(String[] args) { int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9}; System.out.println(erFen(a, 0, a.length, 5)); } }
这篇关于JavaSE39道基础练习题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南