Java实现经典问题算法

发布于 — 2017 年 11 月 27 日
#Java

反转排序

以相反的顺序把原有数组的内容重新排序

/**
*基本思想:将数组的最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换
*/
public void ReverseSort(int[] array){
    for(int i=0;i<array.length/2;i++){
        int temp=array[i];
        array[i]=array[array.length-1-i];
        array[array.length-1-i]=temp;
    }
}

费氏数列

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子数量为多少? 分析:兔子的数量规律为:1,1,2,3,5,8,13,21…. 当n>=3时,fn=f(n-1)+f(n-2); n为下标

java实现:

public int getCount(int N){
    if(N==1||N==2){
        return 1;
    }else {
        return getCount(N-1)+getCount(N-2);
    }
}

判断素数个数并输出

素数:除了1和它本身以外不再有其他因数 判断N到M直接素数的个数,并输出(N < M)

/**
* 两次循环
*第一次循环是n到m,取每个数
*第二个循环是判断这个数是不是素数
*/
public void judgePrimeNumber(int N;int M){
    int count=0;
    for(int i=N;i<=M;i++){
        boolean flag=true;
        //从2到自身-1,如果有因数,则退出判断
        for(int j=2;j<i;j++){
            if(i%j==0){
                flag=flase;
                break;
            }
        }
        //判断这个数是不是素数,如果是则数量加1并打印
        if(flag==true){
            count+=1;
            System.out.print(i+" ");
        }
    }
    System.out.println("从"+N+"到"+M+"有"+count+"个素数");
}

打印图形类

菱形:

   * 
  *** 
 *****
*******
 *****
  ***
   *

java实现:

/**
*主要分两部分实现,上三角形和下三角形
*上三角形规律:空格数逐层减1,* 逐层加2
*下三角规律:空格数加1;* 逐层减3
*/
public void lingxing(){
    //控制上三角的循环
    for(int i=1;i<=4;i++){
        //打印空白
        for(int k=1;k<=4-i;k++){
            System.out.print(" ");
        }
        //打印 *
        for(int j=1;j<=2*i-1;j++){
            System.out.print("*");
        }
        //换行
        System.out.print();
    }
    //下三角
    for(i=3;i>=1;i--){
        for(int k=1;k<= 4-i;k++){
            System.out.print(" ");
        }
        for(int j=1;j<=2*i-1;j++){
            System.out.print("*");
        }
        System.out.println();
    }
}

打印三角形

*
***
******
********
******
***
*

代码是菱形去掉打印空格的部分