Java常见算法题解析面试题(下)

21.回文数。【了解】
问题描述:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
public class lianxi { 
    public static void main(String[] args) { 
        Scanner s = new Scanner(System.in); 
        int a; 
        do{ 
            System.out.print("请输入一个5 位正整数:");
            a = s.nextInt(); 
        }while(a<10000||a>99999); 
        String ss =String.valueOf(a); 
        char[] ch = ss.toCharArray(); 
        if(ch[0]==ch[4]&&ch[1]==ch[3]){
            System.out.println("这是一个回文数");
        } else {
            System.out.println("这不是一个回文数");
        } 
    }
}

//这个更好,不限位数
public class lianxi{ 
    public static void main(String[] args) { 
        Scanner s = new Scanner(System.in);
        boolean is =true;
        System.out.print("请输入一个正整数:");
        long a = s.nextLong();
        String ss = Long.toString(a); 
        char[] ch = ss.toCharArray(); 
        int j=ch.length; 
        for(int i=0; i             if(ch[i]!=ch[j-i- 1])
                is=false;
        }
        if(is==true){
            System.out.println("这是一个回文数");
        } else {
            System.out.println("这不是一个回文数");
        }
    }
}
22.判断100之内的素数。【重点】
//使用除sqrt(n)的方法求出的素数不包括2 和3 
public class lianxi { 
    public static void main(String[] args) { 
        boolean b =false; 
        System.out.print(2 + " ");
        System.out.print(3 + " ");
        for(int i=3; i<100; i+=2) { 
            for(int j=2; j<=Math.sqrt(i); j++) { 
                if(i % j == 0) {
                    b = false;
                    break;
                } else{
                    b = true;
                } 
            }
            if(b == true) {
                System.out.print(i + " ");
            } 
        }
    } 
}
//该程序使用除1 位素数得2 位方法,运行效率高通用性差。 
public class lianxi { 
    public static void main(String[] args) { 
        int[] a = new int[]{2, 3, 5, 7};
        for(int j=0; j<4; j++)
            System.out.print(a[j] + " ");
        boolean b =false;
        for(int i=11; i<100; i+=2) {
            for(int j=0; j<4; j++) { 
                if(i % a[j] == 0) {
                    b = false; break;
                } else{
                    b = true;
                } 
            }
            if(b == true) {
                System.out.print(i + " ");
            }
        }
    } 
}
23.3*3矩阵对角线元素之和。【了解】
public class lianxi { 
    public static void main(String[] args) { 
        Scanner s = new Scanner(System.in); 
        int[][] a = new int[3][3];
        for(int i=0; i<3; i++) { 
            for(int j=0; j<3; j++) { 
                a[i][j] = s.nextInt();
            }
        }
        System.out.println("输入的3 * 3 矩阵是:");
        for(int i=0; i<3; i++) { 
            for(int j=0; j<3; j++) { 
                System.out.print(a[i][j] + " "); 
            }
            System.out.println(); 
        }
        int sum = 0; 
        for(int i=0; i<3; i++) {
            for(int j=0; j<3; j++) { 
                if(i == j) { 
                    sum += a[i][j]; 
                }
            }
        }
        System.out.println("对角线之和是:"+sum); 
    }
}
24.杨辉三角形。【了解】
      1
     1 1 
    1 2 1 
   1 3 3 1 
  1 4 6 4 1 
1 5 10 10 5 1 
public class lianxi{ 
    public static void main(String[] args) { 
        int[][] a = new int[10][10]; 
        for(int i=0; i<10; i++) { 
            a[i][i] = 1; a[i][0] = 1;
        }
        for(int i=2; i<10; i++) { 
            for(int j=1; j                 a[i][j] = a[i-1][j-1] + a[i-1][j]; 
            }
        }
        for(int i=0; i<10; i++) {
            for(int k=0; k<2*(10-i)-1; k++) {
            System.out.print(" ");
        }
        for(int j=0; j<=i; j++) { 
            System.out.print(a[i][j] + " ");
        }
            System.out.println();
    }
}
25.报数游戏。【了解】
问题描述:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
public class lianxi { 
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.print("请输入排成一圈的人数:");
        int n = s.nextInt();
        boolean[] arr = new boolean[n]; 
        for(int i=0; i             arr[i] = true; 
        }
        int leftCount = n; 
        int countNum = 0; 
        int index = 0;
        while(leftCount > 1) {
            if(arr[index] == true) {
                countNum ++; 
                if(countNum == 3) {
                    countNum =0; 
                    arr[index] = false; 
                    leftCount --; 
                }
            }
            index ++;  
        }
        index = 0;
    }
    for(int i=0; i         if(arr[i] == true) {
            System.out.println("原排在第"+(i+1)+"位的人留下了。");
        }
    }
}
26.猴子分桃。【了解】
问题描述:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个, 它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
public class lianxi{ 
    public static void main (String[] args) { 
        int i,m,j=0,k,count; 
        for(i=4;i<10000;i+=4) { 
            count=0; m=i; 
            for(k=0;k<5;k++) {
                j=i/4*5+1; 
                i=j; 
                if(j%4==0) 
                    count++;
                else 
                    break; 
            } 
            i=m; 
            if(count==4) {
                System.out.println("原有桃子"+j+" 个");
                break;
            }
        }
    }
}
27.一个偶数总能表示为两个素数之和。【了解】
//由于用除sqrt(n)的方法求出的素数不包括2 和3,
//因此在判断是否是素数程序中人为添加了一个3。 
public class lianxi{ 
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in); 
        int n,i; 
        do{
            System.out.print("请输入一个大于等于6 的偶数:");
            n = s.nextInt(); 
        } while(n<6||n%2!=0); 
        //判断输入是否是>=6 偶数,不是,重新输入 
        fun fc = new fun(); 
        for(i=2;i<=n/2;i++){ 
            if((fc.fun(i))==1&&(fc.fun(n-i)==1)) {
                int j=n-i; 
                System.out.println(n+" = "+i+" + "+j);
            } 
            //输出所有可能的素数对 
        } 
    }
}
class fun{ 
    //判断是否是素数的函数
    public int fun (int a) {
        int i,flag=0; 
        if(a==3){
            flag=1;
            return(flag);
        } 
        for(i=2;i<=Math.sqrt(a);i++){ 
            if(a%i==0) {
                flag=0;
                break;
            } else 
                flag=1;
        } 
        return (flag) ;
        //不是素数,返回0,是素数,返回1 
    }
}

//解法二 
import java.util.*;
public class lianxi {
    public static void main(String[] args) { 
        Scanner s = new Scanner(System.in);
        int n; 
        do{
            System.out.print("请输入一个大于等于6 的偶数:");
            n = s.nextInt();
        } while(n<6||n%2!=0); 
        //判断输入是否是>=6 偶数,不是,重新输入
        for(int i=3;i<=n/2;i+=2){ 
            if(f un(i)&&fun(n-i)) {
                
            } 
            //输出所有可能的素数对
        } 
    }
    static boolean fun (int a){
        //判断是否是素数的函数
        boolean flag=false; 
        if(a==3){
            flag=true;return(flag);
        } 
        for(int i=2;i<=Math.sqrt(a);i++){ 
            if(a%i==0) {
                flag=false;
                break;
            } else 
                flag=true;
        } 
        return (flag) ; 
    }
}
28.选择排序。【重点】
/**
* 选择排序
* 在未排序序列中找到最小元素,存放到排序序列的起始位置。
* 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。
* 以此类推,直到所有元素均排序完毕。
*/ 
public static void selectSort(int[] numbers) { 
    int size = numbers.length, temp;
    for (int i = 0; i < size; i++) { 
        int k = i; 
        for (int j = size - 1; j >i; j--) {
            if (numbers[j] < numbers[k]) 
                k = j; 
        }
        temp = numbers[i];
        numbers[i] = numbers[k]; 
        numbers[k] = temp;
    } 
}
29.插入排序。【重点】
/**
* 插入排序
* 从第一个元素开始,该元素可以认为已经被排序
* 取出下一个元素,在已经排序的元素序列中从后向前扫描
* 如果该元素(已排序)大于新元素,将该元素移到下一位置
* 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
* 将新元素插入到该位置中
* 重复步骤2
*/ 
public static void insertSort(int[] numbers) { 
    int size = numbers.length, temp, j;
    for(int i=1; i         temp = numbers[i];
        for(j = i; j > 0 && temp < numbers[j-1]; j--) 
            numbers[j] = numbers[j-1]; 
        numbers[j] = temp; 
    }
}

你可能感兴趣的:(java,算法)