Java 练习(一)

  1. 小明在银行的存款有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. 如上题,小明有一笔存款,存款的钱数由键盘来录入,存款的利率是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}
  1. 从键盘输入你的姓名,打印输出一个欢迎界面。
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}
  1. 已知有公式:$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}
  1. 直角坐标系中有两个点 (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}
  1. 从键盘输入一个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,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}
  1. 输入一个四位数,将四位数的每一位相加后输入结果。例如:
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}
  1. 输入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}
  1. 从键盘按照字母,数字,字母,数字的顺序输入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}
  1. 求一个四位数的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}
  1. 李姓家族有一笔¥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}
  1. 编写一个程序,以军用格式如(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}
  1. 从键盘输入一个数字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}
  1. 已知有公式 $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}
  1. 输入一个数字,判断一下该数字是不是水仙花数(三位数)。

水仙花数:例如:$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}
  1. 输入任意两个整数,输出他们的最大公约数和最小公倍数。
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}
  1. 输入一个大于等于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}

相关系列文章