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 +"\nletter is "+letter+"\nchinese letter"+chinese_character);
    }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书的目标读者是准备去硅谷找工作的码农,也适用于在国内找工作的码农,以及刚接触ACM算法竞赛的新手。 市场上讲解算法的书已经汗牛充栋,为什么还要写这本书呢?主要原因是我对目前市场上的大部分算法书都不太满意。 本书有如下特色: 背后有强大的AlgoHub支持。 本书的所有目,都可以在 www.algohub.org(即将上线) 上在线判断代码。这样的一大好处是,读者可以边看书,边实现自己的代码,然后提交到网站上验证自己的想法是否正确。AlgoHub的使命是成为最好的算法学习和交流平台。AlgoHub囊括了 POJ, ZOJ, leetcode, HackerRank 等网站的经典目(一些质量不高的目则忽略),且 AlgoHub有非常简单的加系统,用户不需要写一行代码即可自己添加目,所以AlgoHub的库还在飞速增长中。 每都有完整的代码。 市场上的大部分书,都会讲思路,但给出的代码都是片段,不是完整可编译的代码。本书每都有完整的代码,且每个代码经过千锤百炼,保证可读性的前提下尽可能简短,方面读者在面试中能快速写出来。 每都有多种解法。 本书的宗旨是,用尽可能少的目,覆盖尽可能多的算法。本书中的的每都有多种解法,每种解法不是简单的小改进,而是完全不同的思路,力求举一反三,让读者触类旁通。 本书支持多种主流编程语言。 目前支持 Java, C++, C#, Python, Ruby, JavaScript, Swift, Scala, Clojure, 将来还会支持更多编程语言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值