Java基础50题(3) 21~30题

2018.3.25
Java基础50题系列源码已上传到我的github仓库,有需要的可以自取,欢迎大家提出建议
https://github.com/Lawliet0717/Java-foudamental-50-problems

第21题

题目:求1+2!+3!+…+20!的和
思路:先写一个函数递归求阶乘,再循环求和

package Java基础50题;

/*
 *  Lawliet.2018.3.23
 */
/*
 * 求1+2!+3!+...+20!的和
 */
public class example_21 {

    public static long fac(int n){
        if(n == 1 ){
            return 1;
        }
        return n * fac(n - 1);
    }

    public static void main(String[] args){
        long res = 0;
        for(int i = 1; i <=20; i++){
            res += fac(i);
        }
        System.out.println(res);
    }

}

第22题

题目:利用递归方法求5!
思路:上面已经写过递归求阶乘了

第23题

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。 问第4个人岁数,他说比第3个人大2岁。 问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
思路:还是递归,不要想着去倒推,这题就是练递归的

package Java基础50题;

/*
 *  Lawliet.2018.3.23
 */
/*
 * 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
 * 问第4个人岁数,他说比第3个人大2岁。
 * 问第三个人,又说比第2人大两岁。
 * 问第2个人,说比第一个人大两岁。
 * 最后问第一个人,他说是10岁。请问第五个人多大? 
 */
public class example_23 {

    public static int fun(int n){
        if(n == 1){
            return 10;
        }
        return 2 + fun(n - 1);
    }

    public static void main(String[] args){
        int n = 5;
        int res = fun(n);
        System.out.println(res);
    }

}

第24题

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
思路:把输入的正整数转为String类型进行操作。用.length()返回长度,用.substring() 逆序打印,注意一下.substring() 是左闭右开的。

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.23
 */
/*
 * 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
 */
public class example_24 {

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.println("请输入一个正整数:");
        String str = in.nextLine();
        System.out.println("这个数是" + str.length() + "位数");
        System.out.println("这个数的逆序是:");
        for(int i = str.length() - 1; i >= 0; i--){
            System.out.print(str.substring(i, i+1));//substring是左闭右开的
        }
    }
}

第25题

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
思路:还是转成String。找出mid,从前往后,从后往前比对是否相等。如果是字母的话仍然使用。

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.23
 */
/*
 * 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 
 */
public class example_25 {

    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        System.out.println("请输入一个n位数:");
        String str = in.nextLine();
        char[] arr = str.toCharArray();
        boolean flag = true;
        int length = arr.length;
        int mid =  (int) arr.length / 2 ;
        System.out.println(mid);
        for(int i = 0; i < mid; i++){
                if(arr[i] != arr[length - 1 - i]){
                    flag = false;
                }
            }
        if(flag == true){
            System.out.println("是回文");
        }else{
            System.out.println("不是回文");
        }
    }

}

第26题

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
思路:switch写一个判断,首字母一样的再判断第二个

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.23
 */
/*
 * 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
 * 
 */
public class example_26 {

    public static void main(String[] args){

        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        char[] ch = str.toCharArray();
        switch(ch[0]){
        case 'M':{
            System.out.println("星期一");
            break;
        }
        case 'T':{
            if(ch[1] == 'u'){
                System.out.println("星期二");
            }else{
                System.out.println("星期四");
            }
            break;
        }
        case 'W':{
            System.out.println("星期三");
            break;
        }
        case 'F':{
            System.out.println("星期五");
            break;
        }
        case 'S':{
            if(ch[1] == 'a'){
                System.out.println("星期六");
            }else{
                System.out.println("星期日");
            }
            break;
        }
        }


    }
}

第27题

题目:求100之内的素数
思路:前面做过了,直接把函数拿来用

package Java基础50题;

/*
 *  Lawliet.2018.3.24
 */
/*
 * 求100之内的素数
 */
public class example_27 {

    public static void main(String args[]){
        int factor = 0;
        int num = 0;
        for(int i = 1; i <= 100; i++){
            for(int j = 1; j <= i; j++){
                if(i % j == 0){
                    factor++;
                }
            }
            if(factor == 2){
                num++;
                System.out.print(i + " ");
            }
            factor = 0;
        }
        System.out.println();
        System.out.println("100以内一共有 " + num + "个素数" );
    }

}

第28题

题目:对10个数进行排序
思路:写了个简单的冒泡排序,时间复杂度是O(n²)

package Java基础50题;
import java.util.Arrays;
import java.util.*;

/*
 *  Lawliet.2018.3.24
 */
/*
 * 对10个数进行排序
 */
public class example_28 {

    public static void bubbleSort(int arr[]){

        if(arr == null ||arr.length<2){
            return;
        }

        for(int e = arr.length-1; e > 0; e--){
            for(int i = 0; i < e; i++){
                if(arr[i] > arr[i+1] )
                    swap(arr, i, i+1);
            }
        }
    }

    public static void swap(int arr[], int i, int j){
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    public static void printArray(int[] arr) {
        if (arr == null) {
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.println("请输入数组长度:");
        while(in.hasNext()){
            int len = in.nextInt();
            int[] arr = new int[len];
            System.out.println("请输入数组:");
            for(int i = 0; i < len; i++){
                arr[i] = in.nextInt();
            }
            bubbleSort(arr);
            printArray(arr);
        }
    }
}

第29题

题目:求一个3*3矩阵对角线元素之和
思路:没什么难的,熟悉一下怎么输入二维数组

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.24
 */
/*
 * 求一个3*3矩阵对角线元素之和 
 */
public class example_29 {

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.println("请输入数组的行数和列数:");
        int m = in.nextInt();
        int n = in.nextInt();
        int[][] arr = new int[m][n];
        System.out.println("请输入数组");
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                arr[i][j] = in.nextInt();
            }
        }
        int sum = 0;
        for(int i = 0; i < m; i++){
            sum += arr[i][i];
        }
        System.out.println("对角线之和为:" + sum);
    }

}

第30题

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
思路:用Arraylist来实现,熟悉一下Arraylist的各种方法,最后用Collections.sort实现排序

package Java基础50题;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;



/*
 *  Lawliet.2018.3.24
 */
/*
 * 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 
 */
public class example_30 {
    public static void main(String[] args){
        int[] martx ={1,2,5,8,10};
        ArrayList list = new ArrayList();
        for(int i = 0; i < martx.length; i++){
            list.add(martx[i]);
        }
        System.out.print("当前数组为:");
        for(int i = 0; i < list.size(); i++){
            System.out.print(list.get(i) + " ");
        }
        System.out.println();
        System.out.print("请输入添加的数:");
        Scanner in = new Scanner(System.in);
        int element = in.nextInt();
        list.add(element);
        Collections.sort(list);

        System.out.print("排序之后数组为:");
        for(int i = 0; i < list.size(); i++){
            System.out.print(list.get(i) + " ");
        }

    }
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值