美文网首页
50道JAVA编程算法题(二)

50道JAVA编程算法题(二)

作者: 微尘_8957 | 来源:发表于2018-07-31 09:11 被阅读0次

    【程序21】

    题目:求1+2!+3!+...+20!的和

    程序分析:此程序只是把累加变成了累乘。

    public class  Prog21{

        public static void main(String[] args){

            long sum = 0;

            for(int i=0;i<20;i++)

      sum += factorial(i+1);

            System.out.println(sum);

        }

        //阶乘

        private static long factorial(int n){

            int mult = 1;

            for(int i=1;i

      mult *= i;

            return mult;

        }

    }

    【程序22】

    题目:利用递归方法求5!。

    程序分析:递归公式:fn=fn_1*4!

    public class  Prog22{

        public static void main(String[] args){

            System.out.println(fact(10));

        }

        //递归求阶乘

        private static long fact(int n){

            if(n==1)

      return 1;

            else

      return fact(n-1)*n;

        }

    }

    【程序23】

    题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

    程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

    public class  Prog23{

        public static void main(String[] args){

            System.out.println(getAge(5,2));

        }

        //求第m位同志的年龄

        private static int getAge(int m,int n){

            if(m==1)

      return 10;

            else

      return getAge(m-1,n)+n;      

        }

    }

    【程序24】

    题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    public class  Prog24{

        public static void main(String[] args){

            int n = Integer.parseInt(args[0]);

            int i = 0;

            int[] a = new int[5];

            do{

                a[i] = n%10;

      n /= 10;

      ++i;

            }while(n!=0);

            System.out.print("这是一个"+i+"位数,从个位起,各位数字依次为:");

            for(int j=0;j

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

        }

    }

    【程序25】

    题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

    import  java.io.*;

    public class  Prog25{

        public static void main(String[] args){

            int n = 0;

            System.out.print("请输入一个5位数:");

            BufferedReader bufin = new  BufferedReader(new InputStreamReader(System.in));

            try{

      n = Integer.parseInt(bufin.readLine());

            }catch(IOException e){

                e.printStackTrace();

            }finally{

                try{

      bufin.close();

                }catch(IOException e){

                    e.printStackTrace();

                }

            }

            palin(n);

        }

        private static void palin(int n){

            int m = n;

            int[] a = new int[5];

            if(n<10000 || n>99999){

                System.out.println("输入的不是5位数!");

                return;

            }else{

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

      a[i] = n%10;

      n /= 10;

      }

      if(a[0]==a[4] && a[1]==a[3])

      System.out.println(m+"是一个回文数");

      else

      System.out.println(m+"不是回文数");

      }

       }

    }

    【程序26】

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

    程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。

    import  java.io.*;

    public class  Prog26{

        public static void main(String[] args){

            String str = new String();

      BufferedReader bufIn = new BufferedReader(new InputStreamReader(System.in));

      System.out.print("请输入星期的英文单词前两至四个字母):");

      try{

      str = bufIn.readLine();

      }catch(IOException e){

      e.printStackTrace();

      }finally{

      try{

      bufIn.close();

      }catch(IOException e){

      e.printStackTrace();

      }

          }

      week(str);

        }

        private static void week(String str){

            int n = -1;

            if(str.trim().equalsIgnoreCase("Mo")  || str.trim().equalsIgnoreCase("Mon") ||  str.trim().equalsIgnoreCase("Mond"))

      n = 1;

            if(str.trim().equalsIgnoreCase("Tu")  || str.trim().equalsIgnoreCase("Tue") ||  str.trim().equalsIgnoreCase("Tues"))

      n = 2;

            if(str.trim().equalsIgnoreCase("We")  || str.trim().equalsIgnoreCase("Wed") ||  str.trim().equalsIgnoreCase("Wedn"))

      n = 3;

            if(str.trim().equalsIgnoreCase("Th")  || str.trim().equalsIgnoreCase("Thu") ||  str.trim().equalsIgnoreCase("Thur"))

      n = 4;

            if(str.trim().equalsIgnoreCase("Fr")  || str.trim().equalsIgnoreCase("Fri") ||  str.trim().equalsIgnoreCase("Frid"))

      n = 5;

            if(str.trim().equalsIgnoreCase("Sa")  || str.trim().equalsIgnoreCase("Sat") ||  str.trim().equalsIgnoreCase("Satu"))

      n = 2;

            if(str.trim().equalsIgnoreCase("Su")  || str.trim().equalsIgnoreCase("Sun") ||  str.trim().equalsIgnoreCase("Sund"))

      n = 0;

            switch(n){

                case 1:

      System.out.println("星期一");

      break;

                case 2:

      System.out.println("星期二");

      break;

                case 3:

      System.out.println("星期三");

      break;

                case 4:

      System.out.println("星期四");

      break;

                case 5:

      System.out.println("星期五");

      break;

                case 6:

      System.out.println("星期六");

      break;

                case 0:

      System.out.println("星期日");

      break;

                default:

      System.out.println("输入有误!");

      break;

            }

        }

    }

    【程序27】

    题目:求100之内的素数

    public class  Prog27{

        public static void main(String[] args){

            int n = 100;

            System.out.print(n+"以内的素数:");

            for(int i=2;i

                if(isPrime(i))

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

            }

        }

        //求素数

        private static boolean isPrime(int n){

            boolean flag = true;

            for(int i=2;i

                if(n%i==0){

      flag = false;

      break;

                }

            return flag;

        }

    }

    【程序28】

    题目:对10个数进行排序

    程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。

    public class  Prog28{

        public static void main(String[] args){

            int[] a = new  int[]{31,42,21,50,12,60,81,74,101,93};

            for(int i=0;i<10;i++)

                for(int j=0;j

                    if(a[j]>a[j+1]){

                        int temp = a[j];

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

                        a[j+1] = temp;

                    }

            for(int i=0;i

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

        }

    }

    【程序29】

    题目:求一个3*3矩阵对角线元素之和

    程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

    public class  Prog29{

        public static void main(String[] args){

            int[][] a = new int[][]  {{100,2,3,},{4,5,6},{17,8,9}};

            matrSum(a);

        }

        private static void matrSum(int[][] a){

            int sum1 = 0;

            int sum2 = 0;

            for(int i=0;i

      for(int j=0;j

        if(i==j) sum1 += a[i][j];

        if(j==a.length-i-1) sum2 +=  a[i][j];

      }

            System.out.println("矩阵对角线之和分别是:"+sum1+"和"+sum2);

        }

    }

    【程序30】

    题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

    程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

    import  java.util.Scanner;

    public class  Prog30{

        public static void main(String[] args){

            int[] A = new  int[]{0,8,7,5,9,1,2,4,3,12};

            int[] B = sort(A);

            print(B);

            System.out.println();

            System.out.print("请输入10个数的数组:");

            Scanner scan = new Scanner(System.in);     

    int a = scan.nextInt();

    scan.close();

            int[] C = insert(a,B);

            print(C);

        }

        //选择排序

        private static int[] sort(int[] A){

            int[] B = new int[A.length];

            for(int i=0;i

                int min = A[i];

                for(int j=i+1;j

                    if(min>A[j]){

                        int temp = min;

                        min = A[j];

                        A[j] = temp;

                    }

                    B[i] = min;

                }

            }

            B[A.length-1] = A[A.length-1];

            return B;

        }

        //打印

        private static void print(int[] A){

            for(int i=0;i

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

        }

        //插入数字

        private static int[] insert(int a,int[]  A){

            int[] B = new int[A.length+1];

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

      if(a>A[i]){

        B[i+1] = a;

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

      B[j] = A[j];

      for(int k=i+2;k

      B[k] = A[k-1];

      break;

      }

            return B;

        }

    }

    【程序31】

    题目:将一个数组逆序输出。

    程序分析:用第一个与最后一个交换。

    public class  Prog31{

        public static void main(String[] args){

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

            print(A);

            System.out.println();

            int[] B = reverse(A);

            print(B);

        }

        private static int[] reverse(int[] A){

            for(int i=0;i

                int temp = A[A.length-i-1];

                A[A.length-i-1] = A[i];

                A[i] = temp;

            }

            return A;

        }

        private static void print(int[] A){

            for(int i=0;i

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

        }

    }

    【程序32】

    题目:取一个整数a从右端开始的4~7位。

    程序分析:可以这样考虑:

    (1)先使a右移4位。

    (2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)

    (3)将上面二者进行&运算。

    import  java.util.Scanner;

    public class  Prog32{

        public static void main(String[] msg){

            //输入一个长整数

            Scanner scan = new Scanner(System.in);

            long l = scan.nextLong();

            scan.close();

            //以下截取字符

            String str = Long.toString(l);

            char[] ch = str.toCharArray();

            int n = ch.length;

            if(n<7)

      System.out.println("输入的数小于7位!");

            else

      System.out.println("截取的4~7位数字:"+ch[n-7]+ch[n-6]+ch[n-5]+ch[n-4]);

            }    

    }

    【程序33】

    题目:打印出杨辉三角形(要求打印出10行如下图)

    程序分析:

    1

    1 1

    1 2 1

    1 3 3 1

     1 4 6 4 1

    1 5 10 10 5 1

    public class  Prog33{

        public static void main(String[] args){

            int[][] n = new int[10][21];

            n[0][10] = 1;

            for(int i=1;i<10;i++)

      for(int j=10-i;j<10+i+1;j++)

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

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

                for(int j=0;j<21;j++){

                    if(n[i][j]==0)

                      System.out.print("   ");

                    else{

      if(n[i][j]<10)

        System.out.print("  "+n[i][j]);//空格为了美观需要

      else if(n[i][j]<100)

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

                      else

                        System.out.print(n[i][j]);

      }

                }

                System.out.println();

            }

        }

    }

    【程序34】

    题目:输入3个数a,b,c,按大小顺序输出。

    程序分析:利用指针方法。

    import  java.util.Scanner;

    public class  Prog34{

        public static void main(String[] args){

            System.out.print("请输入3个数:");

            Scanner scan = new  Scanner(System.in).useDelimiter("\\s");

            int a = scan.nextInt();

            int b = scan.nextInt();

            int c = scan.nextInt();

            scan.close();

            if(a

                int t = a;

                a = b;

                b = t;

            }

            if(a

                int t = a;

                a = c;

                c = t;

            }

            if(b

                int t = b;

                b = c;

                c = t;

            }

            System.out.println(a+"  "+b+" "+c);

        }

    }

    【程序35】

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

    import  java.util.Scanner;

    public class  Prog35{

        public static void main(String[] args){

            System.out.print("请输入一组数:");

            Scanner scan = new  Scanner(System.in).useDelimiter("\\s");

            int[] a = new int[50];

            int m = 0;

            while(scan.hasNextInt()){

                a[m++] = scan.nextInt();

            }

            scan.close();

    int[] b = new int[m];

            for(int i=0;i

      b[i] = a[i];

            for(int i=0;i

                for(int j=0;j

                    if(b[j]

                        int temp = b[j];

                        b[j] = b[j+1];

                        b[j+1] = temp;

                    }

            for(int i=0;i

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

        }

    }

    【程序36】

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

    import  java.util.Scanner;

    public class  Prog36{

        public static void main(String[] args){

            final int N = 10;

            System.out.print("请输入10个数的数组:");

            Scanner scan = new Scanner(System.in);

            int[] a = new int[N];

            for(int i=0;i

      a[i] = scan.nextInt();

            System.out.print("请输入一个小于10的数:");

            int m = scan.nextInt();

            scan.close();

            int[] b = new int[m];

            int[] c = new int[N-m];

            for(int i=0;i

      b[i] = a[i];

            for(int i=m,j=0;i

      c[j] = a[i];

            for(int i=0;i

      a[i] = c[i];

            for(int i=N-m,j=0;i

      a[i] = b[j];

            for(int i=0;i

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

        }

    }

    【程序37】

    题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    import  java.util.Scanner;

    public class  Prog37{

        public static void main(String[] args){

            System.out.print("请输入一个整数:");

            Scanner scan = new Scanner(System.in);

            int n = scan.nextInt();

            scan.close();

            //定义数组变量标识某人是否还在圈内

            boolean[] isIn = new boolean[n];

            for(int i=0;i

      isIn[i] = true;

            //定义圈内人数、报数、索引

            int inCount = n;

            int countNum = 0;

            int index = 0;

            while(inCount>1){

                if(isIn[index]){

                    countNum++;

                    if(countNum==3){

                        countNum = 0;

                        isIn[index] = false;

                        inCount--;

                    }

                }

                index++;

                if(index==n)

      index = 0;

            }

            for(int i=0;i

      if(isIn[i])

      System.out.println("留下的是:"+(i+1));

        }

    }

    【程序38】

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

    import  java.util.Scanner;

    public class  Prog38{

        public static void main(String[] args){

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

            Scanner scan = new  Scanner(System.in).useDelimiter("\\n");

            String strIn = scan.next();

            scan.close();

            char[] ch = strIn.toCharArray();

            System.out.println(strIn+"共"+(ch.length-1)+"个字符");

        }

    }

    【程序39】

    题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)

    import  java.util.Scanner;

    public class  Prog39{

        public static void main(String[] args){

            System.out.print("请输入一个整数:");

            Scanner scan = new Scanner(System.in);

            int n = scan.nextInt();

            scan.close();

            if(n%2==0)

      System.out.println("结果:"+even(n));

            else

      System.out.println("结果:"+odd(n));

        }

        //奇数

        static double odd(int n){

            double sum = 0;

            for(int i=1;i

                sum += 1.0/i;

            }

            return sum;

        }

        //偶数

        static double even(int n){

            double sum = 0;

            for(int i=2;i

                sum += 1.0/i;

            }

            return sum;

        }

    }

    【程序40】

    题目:字符串排序。

    public class  Prog40{

        public static void main(String[] args){

            String[] str =  {"abc","cad","m","fa","f"};

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

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

                    if(str[j].compareTo(str[j+1])<0){

                        String temp = str[j];

                        str[j] = str[j+1];

                        str[j+1] = temp;

                    }

                }

            }

            for(String subStr:str)

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

        }

    }

    相关文章

      网友评论

          本文标题:50道JAVA编程算法题(二)

          本文链接:https://www.haomeiwen.com/subject/rprcvftx.html