文章分类 - 算法(In Java)
约瑟夫问题
摘要:有n个人围成一圈做游戏,编号为1,2...n,让第每个人开始报数,报到第k个数的那个人出队,出队的下一个人继续报数,报到第k个数的人再出队。以此类推,求出最后一个出队的人。
阅读全文
汉诺塔
摘要:有三个柱子,原始装满大小不一的盘子的柱子称为A,还有两根空的柱子,分别为B和C。一次只能移动一个盘子,小的盘子只能能在大的盘子上面。最终将A柱子上的盘子全部移到C柱子中 分成3步: 1,把n-1号盘子移动到中转柱子 2,把大盘子从起点移到目标柱子 3,把中转柱子的n-1号也移到目标柱子 代码实现:
阅读全文
罗马数字倒转成阿拉伯数字
摘要:VI=>6,IV=4 左边的数比右边的大,则是右边的数加上左边的; 左边的数比右边的小,则是右边的数减去左边的。 总结: 1)先找到罗马数字最大的那个数字, 2)要是左边的数比右边小,则是用右边的数减去左边的 3)要是左边的数比右边大,则是用右边的数加上左边的 4)重复前面的步骤
阅读全文
判断两个字符串所含字母是否完全一样
摘要:给定两个字符串s和t,判断这两个字符串中的字母是不是完全一样(顺序可以不一样)。 遍历这两个字符串,用每个字符减去'a',将其分别存入到数组中去,随后看这两个数组是否相等。
阅读全文
n的阶乘
摘要:1,求n!的末尾0的个数,如5!=120,0的个数为1。 首先想到的是直接计算出n!的结果,然后再对结果进行求余和求整,最后得到想要的结果。但是假设n是一个足够大的数,那么n!的结果也是一个无限大的数。这样就超出int的范围,甚至long的范围。当n足够大时,此方法无效。 如果n!=k*10M,(0
阅读全文
八皇后问题
摘要:由于8个皇后的任意两个不能处在同一行,那么肯定是每一个皇后占据一行。定义一个数组columnIndex[8],数组中第i个数字表示位于第i行的皇后的列号。先把数组columnIndex的8个数字分别用0~7初始化,接下来就是对数组columnIndex做全排列。因为用不同的数字初始化数组,所以任意两
阅读全文
洗牌算法
摘要:洗牌算法就是给你一个1到n的序列,让你随机打乱,保证每个数出现在任意位置的概率相同,也就是n!个的排列中,每一个排列出现的概率相同。 最常用的方法,每次随机选出一个没有被选过的数放到一个队列中,如果随机出来的数已经被选过,那么继续随机直到遇到一个没有被选过的数放入到队列中;重复这样的操作直到所有的数
阅读全文
老鼠试毒
摘要:3只老鼠确定8个瓶子(只有一个瓶子中药水有毒)哪瓶药水有毒。 其实将8个瓶子用二进制表示,将每个bit位上为1的混合之后,这样就有三份药水,分别给3只老师吃。 其中二进制位为1的地方表示哪只老鼠吃哪瓶药。即: 老鼠1喝4,5,6,7号的药; 老鼠2喝2,3,6,7号的药; 老鼠3喝1,3,5,7号的
阅读全文
吸血鬼数字
摘要:吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各报刊乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的。 例如: 1260=21*60; 1827=21*87; 2187=27*81; 写一个程序,找出4位数的所有吸血鬼数字。 三种方法
阅读全文
不使用Math.sqrt()实现求平方根
摘要:利用牛顿迭代法来求平方根。 设r是 的根,选取 作为r的初始近似值,过点 做曲线 的切线L,L的方程为 ,求出L与x轴交点的横坐标 ,称x1为r的一次近似值。过点 做曲线 的切线,并求该切线与x轴交点的横坐标 ,称 为r的二次近似值。重复以上过程,得r的近似值序列,其中, 称为r的 次近似值,上式称
阅读全文
质素(Prime Number)
摘要:质数(Prime Number),也称素数。是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。 对于自然数n,如果用2到 之间所有的整数去除,均无法整除,则n为质数。 求1-1000以内的所有素数
阅读全文
浙公网安备 33010602011771号