经典算法题汇总
liujiding
The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.
展开
-
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?问题分析:假设第一个月的这一对兔子分别为A,B。每个月的兔子对数依次如下:第一个月:一对(A和B)第二个月:一对(A和B)第三个月:两对(A和B A和B生下的一对C和D)第四个月:三对(A和B C和D原创 2017-09-11 14:47:30 · 5227 阅读 · 0 评论 -
判断101-200之间有多少个素数,并输出所有素数。
问题:判断101-200之间有多少个素数,并输出所有素数。程序分析:素数:如果一个数只能被1和自己整除,那么这个数就是素数判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。上面有这么一句话:用一个数分别去除2到sqrt(这个数) 为什么除到这个数的开平方就好了呢?假如我判断16是不是素数(16的平方根是4),步骤是这样原创 2017-09-11 16:35:54 · 5650 阅读 · 0 评论 -
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。程序分析:(1)对n进行分解质因数,应先找到一个最小的质数k(2)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(3)如果n不等于k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。(4)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。原创 2017-09-28 11:32:58 · 1557 阅读 · 0 评论 -
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。程序分析设计:我们可以先建立一个for循环 因为水仙花数是三位数 所以我们的循环范围是[100,999] ,在循环中 将每个数进行分割 分割成个位 十位 百位 然后计算出【个位的三次方 + 十位的三次方 +原创 2017-09-12 17:44:10 · 50547 阅读 · 5 评论 -
编程找出1000以内的所有完数。
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。程序设计:根据定义,要找出1000之内的完数,需要将循环控制在1到1000,然后再判断这个数是不是完数(先求出这个数的所有因子,将这些因子相加得到的和与该数进行比较,如果相等就证明这个数是完数)代码:import java.util.Scanner;import o原创 2017-10-18 14:41:16 · 11535 阅读 · 0 评论 -
输入两个正整数m和n,求其最大公约数和最小公倍数
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。程序分析:A:两个数求最大公约数,可以用辗转相除法。始终用较大数(被除数)除以较小数(除数),然后用除数代替较大数(被除数),余数代替较小数(除数),代替完后继续让新的被除数除以除数。直到相除余数为0时。最后的除数就是最大公约数。B:两个数的最小公倍数则是两个数的乘积除以这两个数的最大公约数即可。举例说明:求36和8的原创 2017-09-29 14:51:58 · 3752 阅读 · 0 评论 -
求s=a+aa+aaa+aaaa+aa...a的值
这道题目是在一次面试中遇到的,难度不大......题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。程序分析:此道题需要输入两个数,第一个数m用来组成每一位加数,第一位加数由一个m组成,第二位加数由两个m组成......以此类推;第二个数n表示一共几个数相加。比如:你输原创 2017-10-16 14:49:23 · 4943 阅读 · 0 评论