50道java算法题(一)

【程序1】 

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 

1.程序分析:   兔子的规律为数列1,1,2,3,5,8,13,21....

f(n)=f(n-2)+f(n-1) 使用递归

public static int fib(int n)
    {
        
        if(n==0 || n==1 )
        {
            return 1;
            
        }
        else
        {
            return fib(n-1)+fib(n-2);
        }
        

【程序2】 

题目:判断101-200之间有多少个素数,并输出所有素数。 

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 

则表明此数不是素数,反之是素数。 

   

 public static boolean fn(int n)

    {

        int flag=(int) Math.sqrt(n);

        boolean prime=true;

        for(int i=2;i<=flag;i++)

        {

            if(n%i==0)

            {

                prime=false;

                break;

            }

        }

        return prime;

    }

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        for(int i=101;i<=200;i++)

        {

            if(fn(i))

            {

                System.out.println(i);

            }

        }

     

    }

【程序3】 

题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 

程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

for(int i=100;i<=999;i++)

        {

            int a=i/100;

            int b=(i-a*100)/10;

            int c=i%10;

            if(a*a*a+b*b*b+c*c*c==i)

            {

                System.out.println(i);

            }

        }

【程序4】

字符串反转

题目:编程序将一个字符串反转。

输入任意字符串,比如abcd转换成dcba

public static String reverse(String str)
    {
        char [] mystr=str.toCharArray();
        for(int count=0;count<str.length()/2;count++)
        {
            char temp=mystr[count];
            mystr[count]=mystr[str.length()-count-1];
            mystr[str.length()-count-1]=temp;
            
        }
        str=new String(mystr);  //字符串转数组
        return str;
        
    }

【程序5】
题目:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。

public static void numberOfChar(String str)
    {
        char[] mystr=str.toCharArray();
        int nuberic=0;
        int letter=0;
        int chinese_character=0;
        
        for(int count=0;count<mystr.length;count++)
        {
            int cn=mystr[count];
            if(cn>=19968  &&  cn<=40623)   //java汉字字符编码
            {
                chinese_character++;
            }
            if( Character.isDigit(mystr[count]))
            {
                nuberic++;
            }
            else if(Character.isLetter(mystr[count]))
            {
                letter++;
            }
             
        }
        System.out.println("number is " +nuberic +"
letter is "+letter+"
chinese letter"+chinese_character);
    }
原文地址:https://www.cnblogs.com/tobecrazy/p/3523388.html