Java练习题2

1.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),
几个数相加有键盘控制。

参考代码:

public class XiangJia {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要让几个数相加:");
        int num = sc.nextInt();
        System.out.println("请输入你要用来相加的数字:");
        int number =  sc.nextInt();
        int temp = number;
        int sum = 0;
        int[] array = new int[num];
        array[0] = number;
        for (int i = 1; i < num; i++) {
            number = number * 10 + temp;
            array[i] = number;
        }
        for (int j = 0; j < num; j++) {
            if(j < num - 1) {
                System.out.print(array[j] + "+");
                sum += array[j];
            }
            else {
                System.out.print(array[j]);
                sum += array[j];
            }
        }
        System.out.println("=" + sum);
    }
}

2.如果一个数等于它的所有因子的和(除了他自身),那么我们称这个数为完数.求出1000以内所有的完数.

参考代码:

public class WanShu {
    public static void main(String[] args) {
        System.out.println("1000以内所有的完数为:");
        for (int i = 2; i < 1000; i++) {
            int sum = 0;
            for (int j = 1; j < i; j++) {
                if(i % j == 0) {
                    sum += j;
                }
            }
            if(sum == i) {
                System.out.println(i);
            }
        }
    }
}

3.判断101-200之间有多少个素数,并输出所有素数。素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。

参考代码:

public class SuShu {
    public static void main(String[] args) {
        System.out.println("101到200之间所有的素数有:");
        for (int i = 101; i < 201; i++) {
            for (int j = 2; j < i; j++) {
                // 判断i是否为素数,如果是素数就输出i,跳出当前循环
                if (i % j == 0) {
                    break;
                } else {
                    System.out.println(i);
                    break;
                }
            }
        }
    }
}

4.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

这个题纠结了好长时间,感觉我的方法太笨了,但是想不到其他好方法,希望大神可以多指教.
参考代码:

public class SanWeiShu {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4};
        int count = 0;
        int x, y, z;
        for (int i = 0; i < array.length; i++) {
            int num = 0;
            num += array[i] * 1000;
            x = num;
            for (int j = 0; j < array.length; j++) {
                num = x;
                if(i != j) {
                    num += array[j] * 100;
                    y = num;
                }
                else {
                    continue;
                }
                for (int k = 0; k < array.length; k++) {
                    num = y;
                    if(k != j && k != i) {
                        num += array[k] * 10;
                        z = num;
                    }
                    else {
                        continue;
                    }
                    for (int l = 0; l < array.length; l++) {
                        num = z;
                        if(l != k && l != i && l != j) {
                            num += array[l];
                            count ++;
                            System.out.println(num);
                        }
                    }
                }
            }
        }
        System.out.println("共能组成" + count + "个四位数");
    }
}

5.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1:为了存储多个月的兔子对数,定义一个数组,用动态初始化完成数组元素的初始化,长度为月份
2:因为第1个月,第2个月兔子的对数是已知的,都是1,所以数组的第1个元素,第2个元素值也都是1
3:用循环实现计算每个月的兔子对数
4:输出数组中最后一个元素的值乘以2,就是要查看的月份的兔子总数

参考代码:

public class Test04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入月份来查看兔子总数:");
        int month = sc.nextInt();
        int[] arr = new int[month];
        arr[0] = 1;
        arr[1] = 1;

        for (int i = 2; i < month; i++) {
            arr[i] = arr[i - 2] + arr[i -1];
        }
        System.out.println("第20个月的兔子总数为:" + (2 * arr[month - 1]));
    }
}

6.一球从100米高度自由落下,每次落地后反跳回原高度的一半再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

这个题也感觉我的做法不太科学 - -!

public class Qiu {
    public static void main(String[] args) {
        // 定义高度height
        double height = 100;
        // 定义球经过的总距离sumheight
        // 默认已经第一次落地,所以总长度为100m
        double sumheight = 100;
        // 默认从第二次落地开始循环
        for (int i = 2; i <= 10; i++) {
            sumheight += height;
            height /= 2;
        }
        System.out.println("经过10次反弹球经过的总长度为" + sumheight + "米");
    }
}

7.企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万 之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分, 可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

参考代码:

public class JiangJin {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入当月的利润,单位为万元:");
        double i = sc.nextDouble();
        double sum;
        if(i <= 10) {
            sum = i * 0.1;
        }
        else if(i <= 20) {
            sum = (i - 10) * 0.075 + 10 * 0.1;
        }
        else if(i <= 40) {
            sum = (i - 20) * 0.05 + 10 * 0.1 + 10 * 0.075;
        }
        else if(i <= 60) {
            sum = (i - 40) * 0.03 + 10 * 0.1 + 10 * 0.075 + 20 * 0.05;
        }
        else if(i <= 100) {
            sum = ( i - 60) * 0.015 + 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03;
        }
        else {
            sum = (i - 100) * 0.01 + 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015;
        }
        System.out.println("共可得奖金:" + sum + "万元");
    }
}

8.输入两个正整数m和n,求其最大公约数和最小公倍数。

public class GongBeiShu {
    public static void main(String[] args) {
        // 通过键盘键入m和n的值
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数");
        int m = sc.nextInt();
        System.out.println("请输入第二个数");
        int n = sc.nextInt();
        // 定义最大公因数的默认值为1
        int yinzi = 1;
        int mn;
        // 通过循环来求出最大公约数
        for (int i = m - 1; i >= 2; i--) {
            if(m % i ==0) {
                for (int j = n - 1; j >= 2; j--) {
                    if(n % j == 0 && i == j) {
                        yinzi = j;
                    }
                }
            }
        }
        System.out.println("最小公倍数为:");
        // 最小公倍数的计算公式为 m * n / 最大公约数
        mn = m * n / yinzi;
        System.out.println(mn);
    }
}

9.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

参考代码:

import java.util.Scanner;

public class ChengJi {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要判断的分数:");
        double score = sc.nextDouble();

        if(score > 100 || score < 0) {
            System.out.println("你输入的成绩有误!");
        }
        else {
            if(score >= 90) {
                System.out.println("你的成绩等级为A");
            }
            else if(score >= 60) {
                System.out.println("你的成绩等级为B");
            }
            else {
                System.out.println("你的成绩等级为C");
            }
        }
    }
}

10.输出9*9口诀

public class ChengFaBiao {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j <= i; j++) {
                int chengji = i * j;
                if(i == j) {
                    System.out.println(j + " * " + i + " = " + chengji);
                }
                else {
                    System.out.print(j + " * " + i + " = " + chengji + "  ");
                }
            }
        }
    }
}

你可能感兴趣的:(JAVA基础练习,JAVA)