文章分类 -  算法

洗牌算法
摘要:洗牌算法就是给你一个1到n的序列,让你随机打乱,保证每个数出现在任意位置的概率相同,也就是n!个的排列中,每一个排列出现的概率相同。 最常用的方法,每次随机选出一个没有被选过的数放到一个队列中,如果随机出来的数已经被选过,那么继续随机直到遇到一个没有被选过的数放入到队列中;重复这样的操作直到所有的数 阅读全文
posted @ 2017-02-11 09:36 会飞的金鱼 阅读(149) 评论(0) 推荐(0)
合并排序
摘要:合并排序是建立在归并操作上的一种有效的排序算法。该算法也是采取分治的思想。 合并算法是将两个(或两个以上)有序表合并成一个新的有序表,即把带排序的序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序... 阅读全文
posted @ 2015-11-28 17:37 会飞的金鱼 阅读(122) 评论(0) 推荐(0)
快速排序
摘要:思想方法(分治思想)是把一个序列划分为两个子序列,使第一个子序列的所有元素都小于第二个子序列的所有元素。不断地进行这样的划分,最后构成n个序列,每个序列只有一个元素。这时,它们就是按递增顺序排序额序列了。 方法一:public void QuickSort(int[] arr,int lo... 阅读全文
posted @ 2015-11-11 19:44 会飞的金鱼 阅读(139) 评论(0) 推荐(0)
冒泡排序
摘要:一轮一轮的遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换位置。如此继续进行,直到把最小的元素放在第一个位置。 思想:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元... 阅读全文
posted @ 2015-11-01 13:54 会飞的金鱼 阅读(103) 评论(0) 推荐(0)
求1+2+…+n
摘要:要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C) 利用&&的“短路”特性:&&根据第一个条件的结果来决定是否执行第二个条件。如果第一个条件是false,就不用再执行后面的条件。 而&的特性是两边的条件都要判断(无论前面是tru... 阅读全文
posted @ 2015-10-31 16:59 会飞的金鱼 阅读(126) 评论(0) 推荐(0)
n!的末尾0的个数
摘要:求n!的末尾0的个数,如5!=120,0的个数为1。 首先想到的是直接计算出n!的结果,然后再对结果进行求余和求整,最后得到想要的结果。但是假设n是一个足够大的数,那么n!的结果也是一个无限大的数。这样就超出int的范围,甚至long的范围。当n足够大时,此方法无效。 如果n!=k*10M,(0... 阅读全文
posted @ 2015-09-27 16:52 会飞的金鱼 阅读(342) 评论(0) 推荐(0)
斐波那契兔子问题
摘要:有人想知道一年内一对兔子可繁殖成多少对,便筑了一道围墙把一对兔子关在里面。已知一对兔子每一个月可以生一对小兔子,而一对兔子出生后.第三个月开始生小兔子假如一年内没有发生死亡,则一对兔子一年内能繁殖成多少对? 分析一:列举前七个月兔子的对数,不难发现规律。对应的兔子对数分别是1,1,2,3,5,8,... 阅读全文
posted @ 2015-09-26 15:39 会飞的金鱼 阅读(538) 评论(0) 推荐(0)
蚂蚁爬杆问题
摘要:有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,... 阅读全文
posted @ 2015-09-06 16:45 会飞的金鱼 阅读(2000) 评论(0) 推荐(0)
亮灯问题
摘要:大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。第一次,将所有的灯点亮。第二次,将所有2的倍数的开关按一下。第三次,将所有3的倍数的开关按一下。以此类推。第N... 阅读全文
posted @ 2015-09-06 15:05 会飞的金鱼 阅读(224) 评论(0) 推荐(0)
数手指
摘要:一个小女孩正在用左手手指数数,从1数到n。她从拇指算作1开始数起,然后,食指为2,中指为3,无名指为4,小指为5。接下来调转方向,无名指算作6,中指为7,食指为8,大拇指为9,如此反复。问最后会停在那个手指上?用编号1、2、3、4、5依次表示大拇指、食指、中指、无名指、小指。 输入格式: 输入多... 阅读全文
posted @ 2014-10-22 19:59 会飞的金鱼 阅读(619) 评论(0) 推荐(0)
杨辉三角
摘要:1 1 1 1 2 1 1 3 3 1 . ............. . 根据杨辉三角的性质可知: 1)每一行的第一列的数值都为1。 2)每一行的最后一列的数值都为1。 3)其它行列对应的数值等于上一行,上一列对应的数与上一行,对... 阅读全文
posted @ 2014-06-23 20:25 会飞的金鱼 阅读(114) 评论(0) 推荐(0)
求S=a+aa+aaa+aaaa+a...aa的值
摘要:写一个方法Sum(int a,int count)计算上述的表达式的值,其中a是1~9中的一个数,而count是总共有几个数相加。如1)a=2,count=2:S=2+22=24;2)a=2,count=4:S=2+22+222+2222=2468。 首先计算出第i个数的值,其次再计算出所有... 阅读全文
posted @ 2014-06-21 09:26 会飞的金鱼 阅读(165) 评论(0) 推荐(0)
查出int数组中只出现过一次的元素,其它元素均出现2次
摘要:毫无疑问,双重循环肯定是能解决的,但是时间复杂度却是O(n2)。 解决问题前,先了解一下异或运算。 运算法则: 输入运算输入输出1⊕101⊕010⊕110⊕00 于是,就有了以下的推论: 1) a⊕a=0 2) 0⊕a=a 3) a⊕b=b⊕a 4) a⊕b⊕c=(a⊕b... 阅读全文
posted @ 2014-06-07 10:15 会飞的金鱼 阅读(186) 评论(0) 推荐(0)
顺时针打印矩阵
摘要:今天在园子里看到一篇文章,顺时针打印矩阵,LZ也尝试了一下。 private static void PrintMatrixInCircle(int row, int col, int[][] arr) { int start = 0; ... 阅读全文
posted @ 2014-05-09 16:17 会飞的金鱼 阅读(120) 评论(0) 推荐(0)
百鸡问题
摘要:《算经》中有这样的一个问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”意思相当于公鸡每只5元,母鸡每只3元,小鸡3只1元,用100元买100只鸡,求公鸡、母鸡、小鸡的数量。 先以数学方法来解这道题,设未知数公鸡a只,母鸡b只,小鸡c只,列方程式。 ... 阅读全文
posted @ 2014-04-26 10:50 会飞的金鱼 阅读(379) 评论(0) 推荐(0)
最小公倍数
摘要:求取两个正整数的最小公倍数 方法一: public int GetLCM(int m, int n) { int temp = m; if (m < n) { temp =... 阅读全文
posted @ 2014-04-23 20:48 会飞的金鱼 阅读(117) 评论(0) 推荐(0)
欧几里德算法
摘要:求取两个正整数的最大公因子 一般我们会采取这样的方法: 1 public int GetGCD(int m, int n) 2 { 3 int temp = m; 4 int gcd = 1; 5 if (m 0; i--)1... 阅读全文
posted @ 2014-04-21 20:31 会飞的金鱼 阅读(147) 评论(0) 推荐(0)