摘要: 假设变量x和n是两个正整数,我们知道x/n这个表达式的结果要取Floor,例如x是17,n是4,则结果是4。如果希望结果取Ceiling应该怎么写表达式呢?例如x是17,n是4,则结果是5;x是16,n是4,则结果是4。 一道很基础的题,答案是:(x+n-1)/n 下面给出证明: 1. 设x=kn,k为整数,即x为n的整数倍。则(x+n-1)/n=(kn+n-1)/n=((k+1)n-1)/...阅读全文
posted @ 2009-12-21 17:17 Chris Wang 阅读(86) 评论(0)  编辑
摘要: 问题:有N个人围成一圈,顺序排号。从第一个人开始报数(从1~~3报数),凡报到3的退出圈子,问最后留下的人原来是排在第几号? 请编程实现之。 思路: (1)用一个循环队列array(用数组或者链表模拟循环队列都可)去存放这个n个人组成的圈子. (2)然后依次开始报数,用变量currentCallNum表示当前报数(根据题意,从1开始),用index表示数组里面每个元素的下标(下标从0开始) (3)...阅读全文
posted @ 2009-12-07 13:56 Chris Wang 阅读(67) 评论(0)  编辑
摘要: 思路:(1)从文件中读取内容 转化成字符数组 (2)检查内容是否符合要求 (3)计算字母出现频率 (4)找出出现频率最高的前N个字母 (5)打印这些字母 但是要注意一些异常情况的判断: (1)内容是否只包含英文字母和空格? (2)如果文件中没有包含字母,该如何处理? (3)如果给出的字符里面 只有三个字母如"abc",但是确要找出次数出现最多的前10个字母,该如何处理?具体Java代码如下:阅读全文
posted @ 2009-11-27 13:19 Chris Wang 阅读(425) 评论(0)  编辑
摘要: 思路:首先定义一个方法,传入参数是要搜索的文件夹和要匹配的末尾的字符串,此题我们传入abc (1)首先查找传入的文件夹,列出他下面所属的所有文件和目录 (2)然后遍历这些目录和文件,判断哪些是目录,哪些是文件 (3)如果是文件,就看是否匹配某位以abc结尾,如果是就输出 (4)如果是文件夹,就继续按(1)-(3)步骤递归代码实现如下:阅读全文
posted @ 2009-11-23 23:07 Chris Wang 阅读(216) 评论(0)  编辑
摘要: 题目:多个线程,有些线程对int成员m加1,有些线程这个int成员减1,要求m最小不能小于0,最大不能超过10. 思路:(1)首先定位问题实质,这道题就是多线程里面经典的“生产者-消费者问题”。 (2)对于此问题的描述是:有一块生产者和消费者共享的有界缓冲区,生产者往缓冲区放入产品,消费者从缓冲区取走产品,这个过程可以无休止的执行,不能因缓冲区满生产者放不进产品而终止,也不...阅读全文
posted @ 2009-11-23 11:51 Chris Wang 阅读(163) 评论(0)  编辑
摘要: 求一组数据中所有以下条件的数arr={n1,n2,n3...}: (1)这些数既大于所有它左边的数 (2)又大于所有它右边的数。 输出所有的满足上述条件得数,如果没有就什么都不输出.思路: 一般的思路是 (1)对于这样一组数据{ 2, 3, 1, 2, 8, 9, 11, 22, 13 ,77,888,999} (2)以数组中每个数据做为基准点,去它检查左边的数据是否都小于它,右边的数据是否都大于...阅读全文
posted @ 2009-11-11 14:24 Chris Wang 阅读(16) 评论(0)  编辑
摘要: 平衡点:比如int[] numbers = {1,3,5,7,8,25,4,20}; 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点;假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点 要求:返回任何一个平衡点 代码实现(Java):阅读全文
posted @ 2009-11-09 23:56 Chris Wang 阅读(23) 评论(0)  编辑
摘要: 贪心法:是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优值)的一种解题方法。贪心策略总是做出在当前看来是最优的选择,也就是说贪心策略并不是从整体上加以考虑,它所作出的选择只是在某种意义上的局部最优解。就拿找零钱的这道题来说吧:当前有面值分别为50元,20元,10元,5元,2元,1元的零钱,请给出找n元钱的最佳方案?用贪心法的思想就是:老板要找给我99元的话,他有上面的面值分别为5...阅读全文
posted @ 2009-11-09 23:44 Chris Wang 阅读(237) 评论(0)  编辑
摘要: 求排序一堆整数,数据都是有限范围的和有限个数的,任意数据都小于100000,个数也肯定小于100000,对他们进行排序,要求O(n)的时间复杂度. 思路: (1)比如有一组数据arr={1,200,44,232,12,33,200},然后定义一个数组int[] count = new int[100000],初始化每一个数据值为0; (2)然后扫描这个数组,然后count[arr[1]]++,即:...阅读全文
posted @ 2009-11-06 16:26 Chris Wang 阅读(51) 评论(0)  编辑
摘要: 求一个整数的各位累加和?比如:152->1+5+2->8 -777->-7+7+7=7思路:(1)所以要考虑这个数是 整数和负数的情况,分开处理这两种情况。(2)如果是正整数的话,每一次对这个数num求mod 10得到末尾的数m=num%10, m=num%10 然后再去尾数num=num/10,然后每次加m(3)如果是负数的话,注意m=num%10,得到并不是最末尾数,而是末尾...阅读全文
posted @ 2009-11-05 00:08 Chris Wang 阅读(20) 评论(0)  编辑