Day37---学习Java第三弹

2021-08-18

Java经典编程例题

40、字符串排序。

package wangjt;

import java.util.Scanner;

public class test40 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String[] toStrings = new String[5];
        String temp = null;
        toStrings[0] = "afdfdcv";
        toStrings[1] = "ghaf";
        toStrings[2] = "fdasfas";
        toStrings[3] = "tyrdfas";
        toStrings[4] = "fadsfsd";
        for (int i = 0; i < 5; i++) {
            for (int j = i + 1; j < 5; j++) {
                if (toStrings[i].compareTo(toStrings[j]) > 0) {
                    temp = toStrings[i];
                    toStrings[i] = toStrings[j];
                    toStrings[j] = temp;
                }
            }
        }
        for (int i = 0; i < 5; i++) {
            System.out.println(toStrings[i]);
        }
    }
}

第四十题:字符串排序。
分析:和我们常做的int类型排序差不多,只是把int换成了String而已,只需用一个字符串比较的方法,再用冒泡法等方法排序 。

 

41、海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

package test2;

public class test41 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int temp = 0, j, i = 4, count;
        while (true) {
            j = i;//先保存i的值
            count = 0;//表示判定成功的次数
            for (int k = 0; k < 5; k++) {
                temp = i / 4 * 5 + 1;
                i = temp;
                if (temp % 4 == 0) {//如果该数是四的倍数
                    count++;
                } else {
                    break;
                }
            }
            i = j;
            if (count == 4) {
                System.out.println(temp);
                break;
            }
            i += 4;//因为变量i表示最后剩的桃子,而该数一定是四的倍数,所以该变量自加四
        }
    }

}

分析: 需要用循环,判定的条件为初始在执行运算后的数值可以被四整除,且该操作需连续四次判定为正确
需要注意的点:在得到结果后需跳出while循环

 

42、809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。

在这里插入代码片package test2;

public class test42 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int i = 10;
        while (i < 100) {
            if (8 * i > 10 && 8 * i < 100 && 9 * i >= 100 && 9 * i < 1000) {
                System.out.println(i + " " + 809 * i);
                break;
            }
            i++;
        }
    }

}

分析:原来题目的这个等式无解,去掉加一就有解了,但是这个等式也没有什么意义了,因为它对于任何数字都成立,所以只用管这题的第二个条件即可
需要注意的点:如果用while循环记得在得到结果后跳出循环。

 

43、题目:求0—7所能组成的奇数个数。
//组成1位数是4个。
//组成2位数是74个。
//组成3位数是7
84个。
//组成4位数是7
884个。

//…

package test2;

public class test43 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int m = 0, i = 1;
        while (i < 76543210) {
            if (i % 2 != 0) {
                m++;
            }
            i++;
        }
        System.out.println(m);
    }

}

分析:虽然题目没有明说数字可不可以重复,但从下面组成数字的个数我们可以看出数字是可以重复的,直接用循环搞定
需要注意的点:注意条件是奇数

 

44、一个偶数总能表示为两个素数之和。

package test2;

import java.util.Scanner;

public class test44 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int j = 2; j < n; j++) {
            if (mi(j) && mi(n - j)) {
                System.out.println(j + " " + (n - j));
                break;
            }
        }
    }

    static boolean mi(int i) {
        for (int j = 2; j < i / 2; i++) {
            if (i % j == 0) {
                return false;
            }
        }
        return true;
    }
}

分析:先写出求素数的方法
需要注意的点:由于用除sqrt(n)的方法求出的素数不包括2和3,因此在判断是否是素数程序中人为添加了一个3。

 

 

--------------------------------------------------------------------------------------------------

明天继续

posted @ 2021-08-18 21:36  zrswheart  阅读(23)  评论(0编辑  收藏  举报