Java 练习(一)
- 小明在银行的存款有1万元,已知,银行的年利率是1.9%,请问,不取出钱的情况下,存五年后,小明一共可以取出多少钱?
注意:输出的钱数单位为元。
1public class Main {
2 public static void main(String[] args) {
3 double principal = 10000;
4 double savingPeriod = 5;
5 for (int i = 1; i <= savingPeriod; i++){
6 principal *= 1.019;
7 }
8 System.out.println(principal);
9 }
10}
- 如上题,小明有一笔存款,存款的钱数由键盘来录入,存款的利率是1.9%,输入存款年限,根据年限和本金,给出最终取出的钱数。
以下为给出的测试样例。
1example:
2
3input:
410000
55
6
7output:
810986.792440810985
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.in);
6 double principal = scanner.nextDouble();
7 int savingPeriod = scanner.nextInt();
8 scanner.close();
9 for (int i = 1; i <= savingPeriod; i++) {
10 principal *= 1.019;
11 }
12 System.out.println(principal);
13 }
14}
- 从键盘输入你的姓名,打印输出一个欢迎界面。
1example:
2
3input:
4MLX
5
6output:
7********************************************
8* Hi, MLX Welcome to enter Python's World! *
9********************************************
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.in);
6 String name = scanner.nextLine();
7 scanner.close();
8
9 System.out.println("*".repeat(44)); // 重复字符串
10 System.out.println(String.format("* Hi, %s Welcome to enter Python's World! *", name)); // 格式化字符串
11 System.out.println("*".repeat(44));
12 }
13}
- 已知有公式:$b=a\times(1+\frac{r}{100})^n$ ,输入a、r和n的值,计算b的值。其中n是整数。
1example:
2
3input:
43
55
68
7
8output:
94.432366331367189
10
11input:
121.5
13-8.5
145
15
16output:
170.9620479741078126
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.in);
6 double a = scanner.nextDouble();
7 double r = scanner.nextDouble();
8 double n = scanner.nextDouble();
9 scanner.close();
10
11 double b = a * Math.pow((1 + r / 100), n);
12 System.out.println(b);
13 }
14}
- 直角坐标系中有两个点 (x1, y1) 和 (x2, y2),从键盘输入两个点的坐标,计算两个点之间的距离。
1example:
2
3(1.0, 3.5) (-2, -5)
4
5input:
61.0
73.5
8-2
9-5
10
11output:
12distance = 9.013878188659973
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.in);
6 double x1 = scanner.nextDouble();
7 double y1 = scanner.nextDouble();
8 double x2 = scanner.nextDouble();
9 double y2 = scanner.nextDouble();
10 scanner.close();
11
12 double distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
13 System.out.println(distance);
14 }
15}
- 从键盘输入一个3位数,依次输出3位数的个位,十位和百位的值。
1example:
2
3input:
4123
5
6output:
73
82
91
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.in);
6 String str = scanner.nextLine();
7 scanner.close();
8
9 for (int i = 2; i >= 0; i--) {
10 System.out.println(str.charAt(i)); // 取字符串中的某个字符
11 }
12 }
13}
- 已知斐波那契数列的值依次为:1,1,2,5,8,13,21,34……
有斐波那契数列的公式为:
$$ F(n) = \frac{{\left( \frac{{1 + \sqrt{5}}}{2} \right)^n - \left( \frac{{1 - \sqrt{5}}}{2} \right)^n}}{{\sqrt{5}}} $$
试编写程序,输入一个n,可以得到斐波那契数列第n项的值。
1ex1:
2
3input:
45
5
6output:
75
8
9ex2:
10
11input:
1210
13
14output:
1555
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.in);
6 int n = scanner.nextInt();
7 scanner.close();
8
9 System.out.println(fibonacci(n));
10 }
11
12 public static int fibonacci(int n) {
13 double sqrt5 = Math.sqrt(5);
14 double phi = (1 + sqrt5) / 2;
15 double psi = (1 - sqrt5) / 2;
16 return (int) ((Math.pow(phi, n) - Math.pow(psi, n)) / sqrt5);
17 }
18}
- 输入一个四位数,将四位数的每一位相加后输入结果。例如:
1input:3478
2
3output:22
4
5input:1234
6
7output:10
注:即 3+4+7+8=22;1+2+3+4=10
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.in);
6 String number = scanner.nextLine();
7 scanner.close();
8
9 int result = 0;
10 for (char c: number.toCharArray()) { // 增强 for 循环
11 int digit = c - '0'; // 将字符的数字转化为整型
12 result += digit;
13 }
14
15 System.out.println(result);
16 }
17}
- 输入3个不相等的数字,并将三个数字整理成从大到小的顺序输出。
1input:
26
37
42
5
6output:
77 6 2
1import java.util.Scanner;
2import java.util.Arrays;
3
4public class Main {
5 public static void main(String[] args) {
6 int[] numbers = new int[3];
7
8 Scanner scanner = new Scanner(System.in);
9 for (int i = 0; i < 3; i++) {
10 numbers[i] = scanner.nextInt();
11 }
12 scanner.close();
13
14 String sortedNumbers[] = Arrays
15 .stream(numbers) // IntStream
16 .boxed() // Stream<Integer>
17 .sorted((a, b) -> b - a) // Stream<Integer>, (a, b) > b - a 为比较器 (Comparator)
18 .map(String::valueOf) // Stream<String>
19 .toArray(String[]::new); // String[]
20
21 System.out.println(String.join(" ", sortedNumbers));
22 }
23}
- 从键盘按照字母,数字,字母,数字的顺序输入4个数据,将字母和字母连接生成新的字符串,数字和数字做加法得到一个新数字,将字符串和数字组合成新的字符输出。 例如:
1input:
2a
35
4b
57
6
7output:
8ab12
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 Scanner scanner = new Scanner(System.in);
6 String s1 = scanner.nextLine();
7 int num1 = scanner.nextInt();
8 scanner.nextLine(); // Scanner.nextInt() 只读取数组而不读取换行符,因此需要手动读取下一行
9 String s2 = scanner.nextLine();
10 int num2 = scanner.nextInt();
11 scanner.close();
12
13 System.out.println(String.format("%s%s%d", s1, s2, num1 + num2));
14 }
15}
- 求一个四位数的digital root。Digital root是一个1位整数,它的计算方法如下:
The beginning number is 3498
The sum of its digits is 3+4+9+8=24
The number is now 24
The sum of its digits is 2+4=6
Digital root即为6.
比如输入为:
3498
则输出为:
6
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 String number; // 避免作用域错误
6 try (Scanner scanner = new Scanner(System.in)) { // try-with-resources 自动关闭资源
7 number = scanner.nextLine();
8 }
9
10 int numberInt = 0;
11 while (number.length() > 1) {
12 numberInt = 0;
13 for (char c : number.toCharArray()) {
14 numberInt += c - '0';
15 number = String.valueOf(numberInt); // 转换为字符串
16 }
17 }
18 System.out.println(number);
19 }
20}
- 李姓家族有一笔¥100000的遗产分配。已知家族遗产管理者需要留存遗产的1.5%。遗产继承人由三部分组成:1.旁支亲属。每人可以继承剩余遗产份额的为1。2.子女。每人可继承剩余遗产的份额为100。3.配偶,可以继承剩余遗产份额为200.配偶为1人。
从键盘依次属于亲属的人数;子女数。
遗产份额根据能继承遗产的总数来计算。如:有一位亲属,一位子女,一位配偶,则遗产划分的份额为1+100+200=301,即可继承的遗产划分为301份。亲属1份,子女100份,配偶200份。
依次输出遗产管理者获得钱数;每名旁支亲属可以获取的钱数;每名子女可以获得的钱数;配偶可以获得的钱数。(钱数只能为整数,并且不允许四舍五入;配偶的钱为其他人取完之后剩余的所有钱数)
1example:
2
3input:
43
52
6
7output:
81500 244 24400 48968
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 int rel_num, kid_num;
6 try (Scanner scanner = new Scanner(System.in)) {
7 rel_num = scanner.nextInt();
8 kid_num = scanner.nextInt();
9 }
10
11 int mng = 15800;
12 int rest = 100000 - 1500;
13 int weight = rel_num * 1 + kid_num * 100 + 200;
14 double peow = (rest * 1.0) / (weight * 1.0);
15
16 int rel = (int) Math.floor(peow);
17 int kid = rel * 100;
18 int spo = rest - rel - kid;
19
20 System.out.println(String.format("%d %d %d %d", mng, rel, kid, spo));
21 }
22}
13 .鸡尾酒瓶由三个圆锥体部分组成。高度为 h,顶部和底部的半径为 r1 和 r2 的圆锥体的容积为 V 鸡尾酒瓶及容积计算公式如下所示。
$$ V = \pi\frac{(r_1^2 + r_1r_2 + r_2^2)h}{3} $$
试编写程序,输入鸡尾酒瓶的高度h和顶部底部的半径,计算鸡尾酒瓶的容积。
1example:
2
3input:
410
52
64
7
8output:
9293.21531433504737
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 double h, r1, r2;
6 try (Scanner scanner = new Scanner(System.in)) {
7 h = scanner.nextDouble();
8 r1 = scanner.nextDouble();
9 r2 = scanner.nextDouble();
10 }
11
12 double V = (Math.PI / 3.0) * (Math.pow(r1, 2.0) + r1 * r2 + Math.pow(r2, 2.0)) * h;
13 System.out.println(V);
14 }
15}
- 编写一个程序,以军用格式如(0900、1730)读取两个时间,并打印两个时间之间相差的小时和分钟数。
1example:
2
3input:
40900
51730
6
7output:
88 hours 30 minutes
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 String start_time, end_time;
6 try (Scanner scanner = new Scanner(System.in)) {
7 start_time = scanner.nextLine();
8 end_time = scanner.nextLine();
9 }
10
11 int start_minute = Integer.parseInt(start_time.substring(0, 2)) * 60 // String.substring() 字符串切片;Integer.parseInt() 将字符串转为整型
12 + Integer.parseInt(start_time.substring(2));
13 int end_minute = Integer.parseInt(end_time.substring(0, 2)) * 60
14 + Integer.parseInt(end_time.substring(2));
15
16 int duration_minute = end_minute - start_minute;
17
18 int result_minute = duration_minute % 60;
19 int result_hour = duration_minute / 60;
20
21 System.out.println(String.format("%d hours %d minutes", result_hour, result_minute));
22 }
23}
- 从键盘输入一个数字n,计算小于n的所有奇数的和。
1input:
2100
3
4output:
52500
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 int n;
6 try (Scanner scanner = new Scanner(System.in)) {
7 n = scanner.nextInt();
8 }
9
10 int result = 0;
11
12 for (int i = 1; i < n; i++) {
13 if (isOdd(i)) {
14 result += i;
15 }
16 }
17
18 System.out.println(result);
19 }
20
21 public static boolean isOdd(int n) {
22 return n % 2 != 0;
23 }
24}
- 已知有公式 $S=\frac{1}{1^2}+\frac{1}{2^2}+\cdots+\frac{1}{n^2}+\cdots$,编写程序计算 S,要求加的最后一项值大于 $10^{-10}$,输出 S 的值。
1public class Main {
2 public static void main(String[] args) {
3 double result = 0.0;
4 double n = 1.0;
5 while (1.0 / Math.pow(n, 2.0) > 1e-10) { // 1e-10 科学计数法中间不能带空格
6 result += 1.0 / Math.pow(n, 2.0);
7 n += 1.0;
8 }
9 System.out.println(result);
10 }
11}
- 输入一个数字,判断一下该数字是不是水仙花数(三位数)。
水仙花数:例如:$153=1^3+5^3+3^3$ ,即水仙花数。
1input:
2153
3
4output:
5Yes
6
7input:
8256
9
10output:
11No
12
13input:
141234
15
16output:
17Out scope
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 int number;
6 try (Scanner scanner = new Scanner(System.in)) {
7 number = scanner.nextInt();
8 }
9
10 if (number >= 1000 || number < 100) {
11 System.out.println("Out of scope!");
12 return;
13 }
14
15 int digitA = number / 100;
16 int digitB = (number % 100) / 10;
17 int digitC = number % 10;
18
19 String result = Math.pow(digitA, 3) + Math.pow(digitB, 3) + Math.pow(digitC, 3) == number ? "Yes!" : "No!"; // 三元表达式
20 System.out.println(result);
21 }
22}
- 输入任意两个整数,输出他们的最大公约数和最小公倍数。
1input:
26
39
4
5output:
63 18
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 int a, b;
6 try (Scanner scanner = new Scanner(System.in)) {
7 a = scanner.nextInt();
8 b = scanner.nextInt();
9 }
10
11 System.out.println(String.format("%d %d", gcd(a, b), lcm(a, b)));
12 }
13
14 public static int gcd(int a, int b) {
15 if (b == 0) {
16 return a;
17 } else {
18 return gcd(b, a % b);
19 }
20 }
21
22 public static int lcm(int a, int b) {
23 return a * b / gcd(a, b);
24 }
25}
- 输入一个大于等于2的整数,判断其是素数还是不是素数,是素数输出True,否则输出False。
1input:
28
3
4output:
5False
6
7input:
819
9
10output:
11True
1import java.util.Scanner;
2
3public class Main {
4 public static void main(String[] args) {
5 try (Scanner scanner = new Scanner(System.in)) {
6 int n = scanner.nextInt();
7 System.out.println(isPrime(n));
8 }
9 }
10
11 public static boolean isPrime(int n) {
12 if (n <= 1) {
13 return false;
14 } else {
15 for (int i = 2; i <= Math.sqrt(n); i++) {
16 if (n % i == 0) {
17 return false;
18 }
19 }
20 return true;
21 }
22 }
23}