0
点赞
收藏
分享

微信扫一扫

JAVA经典算法50题(4)【面试+工作】

Raow1 2022-04-06 阅读 41


JAVA经典算法50题(4)【面试+工作】

【程序31】   题目:将一个数组逆序输出。
​程序分析:用第一个与最后一个交换。

用逆序循环控制变量输出:

public class Demo31 {

    public static void main(String[] args) {

        int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

        for (int i = a.length - 1; i >= 0; i--) {

            System.out.print(a[i] + " ");

        }

    }

}


【程序32】   题目:取一个整数a从右端开始的第4~7位数字。
​import java.util.*;

public class Demo32 { 

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.print("请输入一个7位以上的正整数:"); 

        long l = in.nextLong(); 

        String str = Long.toString(l); 

        char[] ch = str.toCharArray();

        int j=ch.length; 

        if (j<7){System.out.println("输入错误!");

        } else { 

            System.out.println("截取从右端开始的4~7位是:"+ch[j-7]+ch[j-6]+ch[j-5]+ch[j-4]);

        }

    }

}

import java.util.Scanner;

public class Demo32{

    public static void main(String[] args) {

        int a = 0;

        Scanner s = new Scanner(System.in);

        long b = s.nextLong();

        a = (int) (b % 10000000 / 1000);

        System.out.println(a);

    }

}

【程序33】   题目:打印出杨辉三角形(要求打印出10行如下图)
​1.程序分析:

1

1   1

1   2   1

1   3   3   1

1   4   6   4   1

1   5   10   10   5   1

public class Demo33 {

    public static void main(String args[]) {

        int i, j;

        int a[][];

        int n = 10;

        a = new int[n][n];

        for (i = 0; i < n; i++) {

            a[i][i] = 1;

            a[i][0] = 1;

        }

        for (i = 2; i < n; i++) {

            for (j = 1; j <= i - 1; j++) {

                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];

            }

        }

        for (i = 0; i < n; i++) {

            for (j = 0; j <= i; j++) {

                System.out.printf(a[i][j] + "\t");

            }

            System.out.println();

        }

    }

}


【程序34】   题目:输入3个数a,b,c,按大小顺序输出。
​(也可互相比较交换排序)

import java.util.Arrays;

public class Demo34 {

    public static void main(String[] args) {

        int[] arrays = { 800, 56, 500 };

        Arrays.sort(arrays);

        for (int n = 0; n < arrays.length; n++)

            System.out.println(arrays[n]);

    }

}

if(x > y) { int t = x; x = y; y = t; } if(x > z) { int t = x; x = z; z = t; } if(y > z) { int t = y; y = z; z = t; }


【程序35】   题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

import java.util.*;

public class Demo35 {

    public static void main(String[] args) {

        int i, min=0, max=0, n, temp1, temp2;

        int a[];

        System.out.println("定义数组的长度:");

        Scanner in = new Scanner(System.in);

        n = in.nextInt();

        a = new int[n];

        for (i = 0; i < n; i++) {

            System.out.print("输入第" + (i + 1) + "个数据:");

            a[i] = in.nextInt();

        }


        for (i = 1; i < n; i++) {

            if (a[i] > a[max])

                max = i;  

            if (a[i] < a[min])

                min = i;  

        }


        temp1 = a[0]; 

        a[0] = a[max];

        a[max] = temp1;


        temp2 = a[min];  


        if (min != 0) { // 如果最小值不是a[0],执行下面

            a[min] = a[n - 1];

            a[n - 1] = temp2;  

        } else {  //如果最小值是a[0],执行下面

            a[max] = a[n - 1];

            a[n - 1] = temp1;

        }

        for (i = 0; i < n; i++) {  

            System.out.print(a[i] + " " );

        }

    }

}


【程序36】   题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

import java.util.LinkedList;

import java.util.List;

import java.util.Scanner;

public class Demo36 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.println("输入数字个数n:");

        int n = in.nextInt();

        System.out.println("输入后移位数m:");

        int m = in.nextInt();

        LinkedList<Integer> list = new LinkedList<Integer>();

        for (int i = 0; i < n; i++) {

            System.out.println("请输入第"+(i+1)+"个数:");

            list.add(in.nextInt());

        }

        System.out.println("原数据排序为:");

        for (int t : list) {

            System.out.print(t + " " );

        }

        System.out.println();

        List<Integer> temp1 = list.subList(list.size() - m, list.size());

        List<Integer> temp2 = list.subList(0, list.size() - m);

        temp2.addAll(0, temp1);

        System.out.println("移动后排序为;");

        for (int t : temp2) {

            System.out.print(t + " " );

        }

    }

}

import java.util.*;

public class Demo36{

    public static void main(String[] args){

        Scanner in=new Scanner(System.in);        

        System.out.println("请定义数组的长度:");

        int n=in.nextInt();

        System.out.println("请输入移动的位数:");

        int m=in.nextInt();

        int [] arr=new int [n];

        int [] brr=new int [n];

        for(int i=0;i<n;i++){

            System.out.println("请输入第"+(i+1)+"个数:");

            arr[i]=in.nextInt();

        }


        System.out.println("排序前:");

        for(int i=0;i<n;i++){

            System.out.print(arr[i]+" ");

        }

        System.out.println();


        for(int i=0;i<m;i++){

            brr[i]=arr[n-m+i];

        }

        for(int i=0;i<n-m;i++){

            arr[m+i]=arr[i];

        }

        for(int i=0;i<m;i++){

            arr[i]=brr[i];

        }


        System.out.println("排序后:");

        for(int i=0;i<n;i++){

            System.out.print(arr[i]+" ");

        }

    }

}


【程序37】   题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
​(约瑟夫环问题,百度百科有时间复杂度最简单的数学方法)

原例代码:

import java.util.Scanner;

public class Demo37 {

    public static void main(String[] args) {

        System.out.println("请输人数n:");

        Scanner in = new Scanner(System.in);

        int n = in.nextInt();

        boolean[] arr = new boolean[n];

        for (int i = 0; i < arr.length; i++) {

            arr[i] = true; //下标为TRUE时说明还在圈里

        }

        int leftCount = n;

        int countNum = 0;

        int index = 0;

        while (leftCount > 1) {

            if (arr[index] == true) { //当在圈里时

                countNum++;  //报数递加

                if (countNum == 3) { //报数为3时

                    countNum = 0; //从零开始继续报数

                    arr[index] = false; //此人退出圈子

                    leftCount--; //剩余人数减一

                }

            }

            index++; //每报一次数,下标加一

            if (index == n) { //是循环数数,当下标大于n时,说明已经数了一圈,

                index = 0; //将下标设为零重新开始。

            }

        }

        for (int i = 0; i < n; i++) {

            if (arr[i] == true) {

                System.out.println(i);

            }

        }

    }

}

个人代码1:

import java.util.Scanner;

public class Demo37 {

    public static void main(String[] args) {

        System.out.println("请输入人数:");

        Scanner in = new Scanner(System.in);

        int[] a = new int[in.nextInt()];

        for (int i = 0; i < a.length; i++) {

            a[i] = 1;

        }

        int left = a.length;

        int j = 0;

        int num = 0;

        while (left > 1) {

            if (a[j] == 1) {

                num++;

            }

            if (num == 3) {

                a[j] = 0;

                num = 0;

                left--;

            }

            j++;

            if (j == a.length) {

                j = 0;

            }

        }

        for (int i = 0; i < a.length; i++) {

            if (a[i] == 1) {

                System.out.println("最后留下的人是"+ (i + 1) + "号");

                break;

            }

        }

    }

}

个人代码2:

import java.util.LinkedList;

import java.util.Scanner;

public class Demo37 {

    public static void main(String[] args) {

        LinkedList<Integer> l = new LinkedList<Integer>();

        System.out.println("请输入人数:");

        Scanner in = new Scanner(System.in);

        int len = in.nextInt();

        for (int i = 0; i < len; i++) {

            l.add(i + 1);

        }

        int sum = 0;

        int temp = 0;

        for (int i = 0; sum != len - 1;) {

            if (l.get(i) != 0) {

                temp++;

            }

            if (temp == 3) {

                l.remove(i);

                l.add(i, 0);

                temp = 0;

                sum++;

            }

            i++;

            if (i == l.size()) {

                i = 0;

            }

        }

        for (int t : l) {

            if (t != 0) {

                System.out.println("最后留下的人是" + t + "号");

            }

        }

    }

}


【程序38】   题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

import java.util.Scanner;

public class Demo38 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.println("请输入一个字符串:");

        String mys = in.next();

        System.out.println(str_len(mys));

    }

    public static int str_len(String x) {

        return x.length();

    }

}

import java.util.Scanner;

public class Demo38 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.println("请输入一个字符串:");

        String mys = in.next();

        System.out.println(mys.length());

    }

}


【程序39】  题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
​import java.util.Scanner;

public class Demo39 {

    public static double ouShu(int n) {

        double result = 0;

        for (int i = 2; i <= n; i = i + 2) {

            result +=  1 / (double) i;

        }

        return result;

    }

    public static double jiShu(int n) {

        double result = 0;

        for (int i = 1; i <= n; i = i + 2) {

            result += 1 / (double) i;

        }

        return result;

    }

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.println("输入n的值:");

        int n = in.nextInt();

        if (n % 2 == 0) { //偶数,1/2+1/4+...+1/n

            System.out.println(ouShu(n));

        } else { //奇数,1/1+1/3+...+1/n

            System.out.println(jiShu(n));

        }

    }

}


【程序40】  题目:字符串排序。
​(利用容器类中的sort方法)

import java.util.*;

public class Demo40 {

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<String>();

        list.add("010102");

        list.add("010003");

        list.add("010201");

        Collections.sort(list);

        for (int i = 0; i < list.size(); i++) {

            System.out.println(list.get(i));

        }

    }

}

import java.util.*;


public class Demo40 {

    public static void main(String[] args){

        Scanner in=new Scanner(System.in);

        System.out.println("请定义字符串的个数:");

        int n=in.nextInt();

        String[] str=new String[n];

        for(int i=0;i<str.length;i++){

            System.out.println("请输入第"+(i+1)+"字符串:");

            str[i]=in.next();

        }

        strSort(n,str);

        System.out.println("字符串排序后:");

        for(int i=0;i<str.length;i++){

            System.out.print(str[i]+" ");

        }

    }

    public static void strSort(int n,String[] arr){

        for(int i=0; i<n; i++) { 

            for(int j=i+1; j<n; j++) { 

                if(compare(arr[i], arr[j]) == false) { 

                    String temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;

                } 

            } 

        } 

    }

    static boolean compare(String s1, String s2) {

        boolean result = true; 

        for(int i=0; i<s1.length() && i<s2.length(); i++) { 

            if(s1.charAt(i) > s2.charAt(i)) {

                result = false; 

                break;

            } else if(s1.charAt(i) <s2.charAt(i)) {

                result = true;

                break;

            } else { 

                if(s1.length() < s2.length()) {

                    result = true;

                } else { 

                    result = false; 

                } 

            } 

        } 

        return result;

    } 

}


JAVA经典算法50题(4)【面试+工作】_i++

JAVA经典算法50题(4)【面试+工作】_i++_02JAVA经典算法50题(4)【面试+工作】_字符串_03JAVA经典算法50题(4)【面试+工作】_i++_04JAVA经典算法50题(4)【面试+工作】_java_05



举报

相关推荐

0 条评论