经典Java算法50题整理(1~10题)

第一题:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:通过简单的分析我们就可以发现,只有第一、二个月的兔子总数都为一,从第三个月开始,第n个月的兔子总数都是第(n-1)+(n-2)月的。
需要注意的点:数组的第一个下标为0,因此输出第n个月的兔子总数时数组下标应该为n-1
在这里插入图片描述
第二题:判断101-200之间有多少个素数,并输出所有素数。
分析:素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。
需要注意的点:在第二层for循环中,我用的判断条件是将j<i/2,其实用Math.sqrt(i)更好,可以减少程序的复杂度
在这里插入图片描述
第三题:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
分析:根据题目我们可以锁定水仙花数的范围,然后将水仙花数的各位拆分,在判断该数是否是水仙花数
需要注意的点:对与我这种做法而言,将数拆分时不能直接在i下面赋值,这样a、b、c就是一个确定的数了。需要在for循环的内部定义,使每个i值都对应一个a、b、c
在这里插入图片描述
第四题:将一个正整数分解质因数。例如:输入90,打印出90=233 *5。
分析:分解质因数,只需要用输入的数n从2开始,慢慢往上除就行了
需要注意的点:以输入90为例,当i=3时,45/3=15,此时15%3==0,所以还需要以3为被除数,这就需要我们定义的被除数i不能使用一次就i++,具体怎么做请参照下面的程序
在这里插入图片描述
第五题:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
分析:条件运算符是唯一一个三目运算符,语法:语句1 if条件表达式else语句2。条件运算符在执行时,会先对条件表达式进行求值判断如果判断结果为true,就执行语句1,并返回执行结果。如果判断结果为false,就执行语句2,并返回执行结果。
需要注意的点:本题条件运算的返回结果是字符,所以grade应该定义为char
在这里插入图片描述
第六题:输入两个正整数m和n,求其最大公约数和最小公倍数。
分析:其它的点都容易,主要是对最大公约数的求法,一般有三种算法,在这里我展示了两种,有兴趣的朋友可以查查
需要注意的点:在使用辗转相除法求最大公约数时需要事先知道两个数的大小关系,但用更相减损法的时候不需要知道两个数的大小关系。
在这里插入图片描述
第二种方法
在这里插入图片描述
第七题:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
分析:这题主要是要历遍全部字符以及判断字符属于哪一类
需要注意的点:在Java中没有直接从键盘上接收char型字符的方法,因此我们在需要从键盘上接收字符时可以借助String类型的字符串,然后通过toCharArray()方法将之保存到char[]类型的数组中,或者自己写一个简单的方法来接收字符
在这里插入图片描述
第八题:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
分析:这题主要是要得到各项的值
需要注意的点:无
在这里插入图片描述
第九题:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。
分析:因子就是除去这个数本身之外,所有可以被这个数整除的数
需要注意的点:在第一层for循环和第二层for循环之间需要让sum=0,不然会影响最后一个if()对下一个值的判断
在这里插入图片描述
第十题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
分析:第十次落地时反弹了九次
需要注意的点:无
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_47627886/article/details/108685600
今日推荐