自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

_Luffy的程序之路

与其在等待中枯萎 不如在行动中绽放

  • 博客(69)
  • 资源 (54)
  • 收藏
  • 关注

原创 覆盖数字【解】--英雄会

首先看看题目:给定整数区间[a,b]和整数区间[x,y],你可以使用任意多次a,b之间的整数做加法,可以凑出多少个[x,y]区间内的整数? 输入 a,b,x,y,其中1<= a < b <= 1000000000, 1 <= x < y <= 1000000000。 输出: 用[a,b]内的整数做任意多次加法,可以得到多少个[x,y]内的整数。 例如a = 8, b = 10, x = 3 , y = 20 我们可以得到 [3..20]之间的整数 8, 9, 10, 16 ( 8 + 8),

2013-12-29 13:49:58 1177

原创 杨辉三角的变形【解】--英雄会

今天看到一个有趣的题目: 1 1 1 1 1 2 3 2 1 1 3 6 7 6 3 1 以上三角形的数阵,第一行只有一个数1, 以下每行的每个数,是恰好是它上面的数,左上的数和右上数等3个数之和(如果不存在某个数,认为该数就是0)。求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。 输入n(n <= 1000000000)

2013-12-23 23:31:46 1641

原创 最小操作次数的简易版【解】--英雄会

英雄会:给定两个字符串,仅由小写字母组成,它们包含了相同字符。 求把第一个字符串变成第二个字符串的最小操作次数,且每次操作只能对第一个字符串中的某个字符移动到此字符串中的开头。 例如给定两个字符串“abcd" "bcad" ,输出:2,因为需要操作2次才能把"abcd"变成“bcad" ,方法是:abcd->cabd->bcad。

2013-12-21 12:53:15 2185 6

原创 面试题33:把数组排成最小的数--《剑指offer》

问题:输入一个正整数数组,把数组里面的所有数字连接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3, 32, 321},则打印这三个数字能排成的最小数字321323。这题如果按照一般的全排列,n个数字是n!个排列,实在是行不通...这时我们需要一个排序规则:

2014-06-04 20:34:40 1158 2

原创 极值问题

题目:已知m、n为整数,且满足下列两个条件:① m、n∈1,2,...,K,(1≤K≤10^9)② (n^ 2-mn-m^2)^2=1编一程序,对给定K,求一组满足上述两个条件的m、n,并且使m^2+n^2的值最大。例如,若K=1995,则m=987,n=1597,则m、n满足条件,且可使m^2+n^2的值最大。

2014-05-21 12:40:09 2842

原创 从尾到头打印链表--《剑指offer》

题目:很简单,就是题目,将链表从尾到头打印出来。可能我们首先想到的是将链表进行遍历,将之前的访问的数据进行保存,最后进行反向输出,可是保存数据的空间是个问题;或者是我们将整个链表进行反向操作,将整个链表进行逆置,可是我们只是进行打印操作而已,改变链表不合适吧...其实这时候应该想到了,用栈:既然是逆置,和栈的功能不就不谋而合吗,后进先出,进行反向打印。

2014-05-18 17:27:19 1368

原创 “举一反三”合并数组--《剑指offer》

与上篇思想一样,或者说是替换数字的另一种版本吧,题目如下:有两个已经排好的数组A1和A2,A1的末尾有足够的空间来容纳A2,我们将A2数组插入到A1中,继续保持已经排序;这样看来就和替换空格相似了,如果我们在A1数组从头到尾复制数字,这样导致A1数组后面的数一直不断往后移动,复杂度一样是O(n2),所以,我们来举一反三:

2014-05-18 15:26:46 906

原创 替换空格--《剑指offer》

如题所示,题目很简单,替换空格,将字符串中的空格替换为%20;即"we are happy”替换成“we%20are%20happy”;如果每当我们遇到一个空格就将字符串向后平移两位,这样复杂度就是O(n2)了,这样的方法是不可取的,按照作者的来说,offer已不足拿到了;而当我们反向从字符串末尾开始遍历,复杂度仅为O(n),当然前提的是该字符串有足够空间,否则替换会失败。了解到思想之后程序也就比较简单了,发现自己的与作者的写的也比较类似,就此贴上了...

2014-05-18 13:54:04 1003

原创 vector中的删除,erase和remove的小疑惑--【STL】

对于vector容器的使用,平时只是简单的进行遍历查找一下,未曾进行其它操作,这不,今天出了一点差错;earse方法的操作是将此时的节点删除,然后指向被删除节点的下一个:如对数据1 6 6 4 7;

2014-05-01 14:29:00 4693 1

原创 最长公共子序列--【算法导论】

最长公共子序列:一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列;其核心很简单:if(str1[i - 1] == str2[j - 1]) m[i][j] = m[i - 1][j - 1] + 1;else m[i][j] = max(m[i - 1][j], m[i][j - 1]);前面动态规划思想说得足够了,这次直接贴:

2014-04-25 14:20:56 1092

原创 矩阵链乘法--【算法导论】

矩阵链乘:给定一个n个矩阵的序列(矩阵链)<A1, A2,...,An>,希望计算它们的乘积A1A2...An,当然乘积的顺序我们可以通过括号来改变,最后希望乘积最少;如对A1A2A3A4:方案1:(A1(A2(A3A4)))方案2:(A1((A2A3)A4))方案3:((A1A2)(A3A4))方案4:((A1(A2A3))A4)方案5:(((A1A2)A3)A4)

2014-04-24 16:18:16 1515

原创 钢条切割--【算法导论】

对以上的价格表样例,进行模拟切割:r1 = 1,切割方案1 = 1(无切割)r2 = 5,切割方案2 = 2(无切割)r3 = 8, 切割方案3 = 3(无切割)r4 = 10, 切割方案4 = 2 + 2r5 = 13, 切割方案5 = 2 + 3r6 = 17, 切割方案6 = 6(无切割)r7 = 18, 切割方案7 = 1 + 6或7 = 2 + 2 + 3r8 = 22, 切割方案8 = 2 + 6r9 = 25, 切割方案9 = 3 + 6r10 = 30,切割方案10 =

2014-04-23 12:05:17 1233

原创 插入排序--《编程珠玑》

如百度百科:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分

2014-04-01 15:12:28 1135

原创 变位词--【编程珠玑】

重拾《编程珠玑》,再看一遍,之前未仔细看的或是忽略的,希望这次能有更丰富的收获;好,如题,变位词:一种把某个词或句子的字母的位置(顺序)加以改换所形成的新词,英文叫做anagram,词典把这个词翻译成“变位词”。书中将这个程序按三个阶段的“管道”组织,其中一个程序的输出文件作为下一个程序的输入文件。第一类程序标识单词,第二个程序排序标识后的文件,而第三个程序将这些单词压缩为每个变位词类一行的形式。

2014-03-20 16:45:09 2044 7

原创 位图排序-《编程珠玑》

如题:实现位图排序,其中假设n为10 000 000,且输入文件包含1 000 000个正数;具体细节详见《编程珠玑》第一章问题;由于数据的大小问题,在这#define N 1000,即数据在1000以内的100个数据,进行排序(当然由于随机数的产生问题,有数重复,在此并未处理)

2014-03-18 20:01:29 1131

原创 先序、中序、后序遍历(三种情况访问二叉树)

昨天才写了篇关于二叉排序树的博客,想起之前有所遗漏,如先序,中序以及后序遍历;先序遍历:也叫做先根遍历,前序遍历,可记做根左右(二叉树父结点向下先左后右)。首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。 即:若二叉树为空则结束返回,否则:(1)访问根结点(2)先序遍历左子树(3)先序遍历右子树中序遍历:首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右

2014-02-27 17:43:59 2648

原创 二叉排序树(Binary Sort Tree,二叉查找树,二叉搜索树)--【算法导论】

1、首先是了解了二叉搜索树;2、接下来看的是查询二叉搜索树,查询二叉搜索树的内容比较多;(1)查找:即是查询关键字,若存在,返回该节点的指针;否则,返回空;这个书中给了两段伪码,迭代、递归随意;(2)最大关键字及最小关键字元素:顾名思义,肯定是二叉搜索树的最大最小值,以最大关键字为例,一直查询树的右孩子,直到改节点无右孩子为止,该节点就是最大关键字,当然,最小关键字同理;(3)后继与前驱:对一个节点来说,最大的小于该节点值的即是前驱,最小的大于该节点值的即是后继。以后继为例,如果该节点的右子树不为空

2014-02-26 22:45:22 11662 2

原创 坐标与数字--【英雄会】

回到学校,一切显得自由多了,今天看到一道题,“坐标与数字”,通过率接近80%,在此分享一下自己的拙作...如题:如图所示,我们从0开始把整数写在两条直线上,0, 1, 2, 3分别写在(0,0), (1,1), (2,0)和(3, 1)这4点上,如图规律继续写下去。 现在给定坐标(x,y),问(x,y)位置的整数是多少,如果这个位置不存在整数,输入-1。其中, 0<=x,y<=1100。

2014-02-24 16:42:17 1329

原创 中国剩余定理--【信息安全】

这时上学期的信息安全学科的“公钥密码体制”中一章,关于数论基础的内容中说到的。有题如下:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何。即:有一批物品,三个三个地数余二个,五个五个地数余三个,七个七个地数余二个,问这批物品最少有多少个。这一题的解法也很简单:三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五使得知;即将该数除以3得到的余数乘以70,将除以5得到的余数乘以21,将除以7得到的余数乘以15,加起来后除以105,取余就是答案。即2 * 70 + 3 * 21 +

2014-02-23 21:03:38 1390

原创 三角形的内切圆和外接圆--【英雄会】

这个题目有一段时间了,不过当时正在准备考试,纵使有心刷题,奈何佛脚得抱,后来又被撤了,所以拖至今天...如题:一个三角形必然存在它的内切圆与外接圆,求他们的面积比。考虑到精度问题,我们输出面积比*1000的整数部分(直接下取整)。 输入数据是一个三角形的三个顶点,但这三个顶点在三维空间中,所以输入是9个整数,分别表示三个顶点(x1,y1,z1) (x2,y2,z2) (x3,y3,z3),保证三点不共线,每个整数在-1000,+1000范围内。 输出内接圆与外切圆的面积比*1000的整数部分。

2014-02-18 22:26:10 2044

原创 “栈和队列”之队列--基本数据结构

第一期:在队列中,被删去的总是在集合中存在时间最长的那个元素:队列实现的是一种先进先出(first-in,first-out,FIFO)策略;队列上的INSERT操作称之为入队(ENQUEUE),DELETE操作称为出队(DEQUEUE);正如栈的pop操作一样,DEQUEUE操作也没有元素参数。队列的先进先出特性类似于收银台前排队结账的一排顾客。队列有队头(head)和队尾(tail),当有一个元素入队时,它被放在队尾的位置;下面是一个简单的队列操作,初始化队列,入队,出队处理;

2014-02-15 15:15:30 1100

原创 “栈与队列”之栈--基本数据结构

亡羊补牢犹未晚啊,栈,按照书上小小的操作一下,后续会有补充...栈和队列都是动态集合,且在其上进行DELETE操作所移除的元素是预先设定的。在栈(stack)中,被删除的是最近插入的元素:即栈实现的是一种后进先出(last-in,first-out,LIFO)策略。下面是栈的简单操作,即初始化InitStack,空栈StackEmpty,入栈Push,出栈Pop;

2014-02-15 13:44:41 1327 2

原创 分巧克力 - 湖北民族学院提供--【英雄会之高校俱乐部】

经常去英雄会逛逛倒是不假,但是很少去高校俱乐部,因为这两边的题目有部分相同,hero那边难度可能稍微高一点,不过今天倒是逛了一下,被一个一星的来了个当头一棒...题目很简单:儿童节快到了,班长想要给班上的每个同学给一个巧克力,巧克力的形状是一个宽为2,长为n的长方形,由于巧克力太贵,班长就想把这个大块的巧克力分成许多 1*2(宽*长)的小块巧克力,这样每个人都能得到一份1*2的巧克力,现在给定巧克力的长为正整数n(1<=n<=91),请你判断对于这 个2*n的巧克力有多少种不同的分法? 相信很多人第一

2014-01-31 21:18:36 1806

原创 版权问题伴我行

在当今社会,版权问题确实是一个比较热的话题,各种书籍作者什么的对于自己的版权也是重视之至;本来这个问题对我来说是不相干的,至少现在来说是比较遥远的...可是最近在csdn上发了一些学习记录性的博客,偶尔去看看搜索效率怎么样,昨天搜索了“有n个罐子,有k个硬币,每个罐子可以容纳任意数量的硬币。罐子是不透明的,起初你可”这后面的文字被百度自动截取了(限于38个文字),可是搜索结果却让吓我一跳...

2014-01-31 10:31:01 1826

原创 报数游戏(2)--【英雄会】

新年快乐!送上蛇年的最后一篇博客,迎接马年...N个人(编号1-N),站成一排,进行报数游戏。报数过程可能进行很多轮,有如下规则: (1) 如果剩余人数不超过3个人,则游戏结束。 (2) 大家报数,然后留下报奇数的人从第一个人继续游戏,或者留下报偶数的人继续游戏。 重复如此(1)(2)两步骤,到游戏结束。 问:最终剩下的三人组有多少种情况?(注意是三人组,例如如果最后剩下2个或者1个人,不计入结果中)。 输入n, (0<n<=10000000) ,输出最终结果。

2014-01-30 16:35:32 2203 6

原创 罐子与硬币--【英雄会】

好久没来英雄会了,所以今天来看看几题,看到“罐子与硬币”这一题不错,这种题目比较适合我的味道,不过,可惜啊...性子太急,分没到手...题目如下:有n个罐子,有k个硬币,每个罐子可以容纳任意数量的硬币。罐子是不透明的,起初你可以随机把这k个硬币任意放在罐子里。然后罐子被打乱顺序,你从外表无法区别罐子。最后罐子被编上号1-n。你有p次机会,每次你可以选择某个罐子,如果该罐子里有硬币,则你可以得到1个(你不可以知道该罐子里有多少硬币),如果该罐子是空的,你得不到任何硬币。你最终要得到至少c枚硬币,我们的问

2014-01-28 19:53:26 2078 4

原创 报数游戏(3)--【英雄会】

回来也十天了,中间各种私事,包括替看店等等...不过现在终于有着较大段时间逛逛英雄会了,最近题目出了数道,当然难度也是比较适合的,二星、三星的我还勉强可以一做...废话不多言,说题目吧:一种报数游戏是从1开始连续报数,如果报到7的倍数(7,14,21,28……)或者包含数字7的数(7,17,27,37……)就用拍手代替这个数而不能报出。假设你连续听到m声拍手,问造成你听到m声拍手的第一下拍手所代表的数是几?例如,你听到了两次连续的拍手,最小的可能这两次拍手是27和28,因此输出27。输入m, 输出这m

2014-01-28 12:01:14 3857

转载 当你学不进去的时候,试试“普瑞馬”法则

【普瑞马法则】以心理学操作性反射的原则为基础,对于人类的行为方式进行观察后,心理学家提出这样一种改进方式,以纠正惰性生活方式,并由这种惰性生活方式的结束而带来整个人生的良性改变。这也叫普瑞马法则。你如果有兴趣坚持尝试一周以下方式,你会发现你整个人会很不同了,如果能继续坚持,那惰性生活方式就会永远不敢再接近你,而你将在人生获得你愿意的成就。1.大脑喜欢色彩。平时使用高质量的有色笔或使用有

2014-01-28 11:24:50 1023

原创 倒排索引处理文档--【随笔】

就是给给一个文档集,利用倒排挡索引技术,实现1.输入布尔表达式,如:输入hello&world,输出同时存在这两个单词的文档名2.输入一个词组,输出存在这个词组的文档名倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。有两种不同的反向索引形式:1、一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。2、一个单

2014-01-16 09:00:44 1918 1

原创 计数排序(线性时间排序)--【算法导论】

之前的排序都是通过比较得到的,即比较排序:在排序的最终结果中,各元素的次序依赖与它们之间的比较。而时间复杂度最好的也是O(nlgn),接下来说一个未经比较的排序,而复杂度则是线性的。计数排序假设n个输入元素的每一个都是在0-k区间内的一个整数,其中k为某个整数。当k = O(n)时,排序的运行时间为O(n)。计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上了。例如,如果有17个元素小于x,则将x放在第18个位置即可。但是当存在几个

2014-01-09 20:56:59 1139

原创 快速排序--【算法导论】

对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为O(n²)的排序算法。虽然最坏情况时间的复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好:它的期望时间复杂度是O(nlgn),而且O(nlgn)中隐含的常数因子非常小,另外,它还能够进行原址排序,甚至在虚存环境中也能很好的工作。快速排序使用了分治的思想:分解:将数组A[low..high]划分为两个子数组A[low..mid - 1]以及A[mid + 1..high],使得A[low..mid - 1]子

2014-01-09 15:49:23 1117

原创 最大优先队列--【算法导论】

堆排序是一个优秀的算法,但是在实际应用中,如快速排序的性能会优于它。但是堆排序有着另外的作用,如优先队列;与堆排序一样,优先队列也有两种形式:最大优先队列,最小优先队列(暂且讨论最大优先队列);优先队列:是一种用来维护由一组元素构成的集合S的数据结果,其中的每个元素都有一个相关的值,称为关键字。最大优先队列支持:

2014-01-09 14:07:40 2740

原创 堆排序(最小堆)--【算法导论】

堆排序的思想在堆排序(最大堆)已做说明,故不再赘述;总之,思想就是首先进行建堆,由于这是最小堆,故而必须保证父节点都小于孩子节点,若不满足条件,则进行调节;最后进行堆排序,不断将最小的提取出来,并对剩下的进行调节,使之满足最小堆;故而将最大堆中的判断父节点与孩子大小部分改变即可: if (left <= length && A[largest] > A[left]) //左孩子比父节点小 { largest = left; } if (righ

2014-01-08 21:39:06 8378

原创 堆排序(最大堆进阶)--【算法导论】

上篇【堆排序(最大堆)】说过,代码是按照书中的伪码写出,书中的根结点是1,但一般我们数组的下标由0开始,故而现在改为由0开始;上篇已说过实现的过程,故而不在赘述,可见上篇;将其中的一些条件改变即可:首先是建堆的值,由0开始的根结点,对于A[n],它的父节点是(n - 1) / 2,并且到0为止,都是父节点;故而建堆:

2014-01-08 20:01:54 1161

原创 堆排序(最大堆[1])--【算法导论】

前一章的“概率分析与随机算法”实在伤脑子,好在看过去了,现在正在看的是排序部分;堆排序,这次说的是最大推排序(和最小堆原理也是相同的),和原文中的思路也是一样的,后序有补充也会贴出来的;最大堆...即是父节点的值大于孩子的值,若不满足条件,则经过调节使其满足条件:

2014-01-08 19:23:04 2757

原创 子序列的个数(解)--【英雄会】

本题同样来自caopengcs,只要你有兴趣,每个人都可以出题(出题入口在主页右侧边栏“贡献题目”->“我要发布”内),以下是题目详情:子序列的定义:对于一个序列a=a[1],a[2],......a[n],则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列,其中1<=p1<p2<.....<pm<=n。 例如:4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。 对于给出序列a,有些子序列可能是相同的,这里只算做1个,要求输出a的不同子序列的数量。

2014-01-07 23:39:37 1058

原创 微软必应-英雄会第三届在线编程大赛:几个Bing?【英雄会】

本届大赛由微软必应词典冠名,必应词典(http://cn.bing.com/dict/?form=BDVSP4&mkt=zh-CN&setlang=ZH)是微软推出的新一代英语学习引擎,里面收录了很多我们常见的单词。但现实生活中,我们也经常能看到一些毫无规则的字符串,导致词典无法正常收录,不过,我们是否可以从无规则的字符串中提取出正规的单词呢? 例如有一个字符串"iinbinbing",截取不同位置的字符‘b’、‘i’、‘n’、‘g’组合成单词"bing"。若从1开始计数的话,则‘b’

2014-01-07 22:05:35 1032

原创 最大子数组问题(分治法)--【算法导论】

《算法导论》中引入这个问题是通过股票的购买与出售,经过问题转换,将前一天的当天的股票差价重新表示出来,即转为了一个最大子数组的问题,具体内容我不多说,转的内容是:13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7找到这连续的16个数里面的连续和最大的子数组;假定我们要寻找子数组A[low..high]的最大子数组,使用分治法意味着我们要将子数组划分为两个规模尽可能相等的子数组。也就是说,找到子数组的中央位置,比如mi

2014-01-07 11:44:05 5219 16

原创 最大子数组问题(动态规划)--【算法导论】

《算法导论》中引入这个问题是通过股票的购买与出售,将前一天的当天的股票差价重新表示出来,即转为了一个最大子数组的问题,具体内容我不多说,转的内容是:13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7找到这连续的16个数里面的连续和最大的子数组;书中练习部分说用设计非递归的,线性时间的算法,我就YY为动态规划处理了;从数组的左边界开始,从左至右处理,记录到目前为止已经处理过的最大子数组。若已知A[1..j]的最大子

2014-01-07 10:32:01 9042

原创 二十进制数的加法--【英雄会】

今天晚上看到群里面交流的信息,发现又出新题了,看了一下,难度还可以,不过一会儿就由三星难度降为二星了...有兴趣的朋友们可以去英雄会......如题:在二十进制中,我们除了使用数字0-9以外,还使用字母a-j(表示10-19),给定两个二十进制整数,求它们的和。 输入是两个二十进制整数,且都大于0,不超过100位;输出是它们的和(二十进制),且不包含首0。我们用字符串来表示二十进制整数。 总的来说,这一题难度还可以,只要注意点没忘记,大家应该都是没问题的;首先是简单的两个数相加“122”

2014-01-06 22:26:26 1142

覆盖数字--英雄会pongo

更多精彩:http://blog.csdn.net/xjm199 给定整数区间[a,b]和整数区间[x,y],你可以使用任意多次a,b之间的整数做加法,可以凑出多少个[x,y]区间内的整数? 输入 a,b,x,y,其中1<= a < b <= 1000000000, 1 <= x < y <= 1000000000。 输出: 用[a,b]内的整数做任意多次加法,可以得到多少个[x,y]内的整数。 例如a = 8, b = 10, x = 3 , y = 20 我们可以得到 [3..20]之间的整数 8, 9, 10, 16 ( 8 + 8), 17(8 + 9), 18(9 + 9), 19(9 + 10), 20(10 + 10),因此输出8。 问:2+3=5 1+4=5 这算1个还是2个? 答:算1次 问你能覆盖多少个不同的数字 [x,y]全覆盖住得话 就是y - x + 1。

2013-12-29

VC++窗口重绘

窗口重绘 //CString str("维新科学技术培训中心"); CString str; str="维新科学技术培训中心"; pDC->TextOut(50,50,str); str.LoadString(IDS_STRINGVC); pDC->TextOut(0,200,str);

2013-12-27

插入符(文本插入符, 图形插入符)

文本操作符,图形操作符 /*//创建设备描述表 CClientDC dc(this); //定义文本信息结构体变量 TEXTMETRIC tm; //定义设备描述表中的文本信息 dc.GetTextMetrics(&amp;tm); //根据字体大小,创建合适的插入符 CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);*/ bitmap.LoadBitmap(IDB_BITMAP1); CreateCaret(&amp;bitmap); //显示插入符 ShowCaret();

2013-12-27

杨辉三角的变形

更多精彩:http://blog.csdn.net/xjm199/article/details/17514877 1 1 1 1 1 2 3 2 1 1 3 6 7 6 3 1 以上三角形的数阵,第一行只有一个数1, 以下每行的每个数,是恰好是它上面的数,左上的数和右上数等3个数之和(如果不存在某个数,认为该数就是0)。 求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。 输入n(n <= 1000000000)

2013-12-23

画刷绘图MFC

//位图画刷 CBitmap bitmap; //加载位图 bitmap.LoadBitmap(IDB_BITMAP1); //创建画刷 CBrush brush(&bitmap); //创建并获得设备描述表 CClientDC dc(this); //矩形区域 dc.FillRect(CRect(m_ptOrigin,point),&brush);

2013-12-22

使用画刷绘图

//位图画刷 CBitmap bitmap; //加载位图 bitmap.LoadBitmap(IDB_BITMAP1); //创建画刷 CBrush brush(&bitmap); //创建并获得设备描述表 CClientDC dc(this); //矩形区域 dc.FillRect(CRect(m_ptOrigin,point),&brush);

2013-12-22

绘制直线MFC

MFC初学,绘制直线 CPen pen(PS_DOT,1,RGB(0,255,0)); CClientDC dc(this); CPen *pOldPen=dc.SelectObject(&pen); dc.MoveTo(m_ptOrigin); dc.LineTo(point); dc.SelectObject(pOldPen);

2013-12-22

建立信号基站

更加精彩:http://blog.csdn.net/xjm199 要建立一个信号基站服务n个村庄,这n个村庄用平面上的n个点表示。假设基站建立的位置在(X,Y),则它对某个村庄(x,y)的距离为max{|X – x|, |Y – y|}, 其中| |表示绝对值,我们的目标是让所有村庄到信号基站的距离和最小。 基站可以建立在任何实数坐标位置上,也可以与某村庄重合。 输入: 给定每个村庄的位置x[],y[],x,y都是整数,满足: -1000000000 < x,y < 1000000000 村庄个数大于1,小于101。 输出: 所有村庄到信号基站的距离和的最小值。 关于精度: 因为输出是double。我们这样判断对错,如果标准答案是A,你的答案是a,如果|A – a| < 1e-3 我们认为是正确的,否则认为是错误的。 样例: 假设有4个村庄位置分别为 (1,4) (2,3) (0,1) (1,1) 我们的结果是5。因为我们可以选择(1.5,2.5)来建立信号基站。 bestDistance = max(|1.5-1|, |2.5-4|) + max(|1.5-2|,|2.5-3|) + max(|1.5-0|,|2.5-1|) + max(|1.5-1|,|2.5-1|) = max(0.5, 1.5) + max(0.5,0.5) + max(1.5,1.5) + max(0.5,1.5) = 1.5 + 0.5 + 1.5 + 1.5 = 5 函数头部: C/C++ double bestDistance(int n, cons int *x, const int *y); Java class Main() { public static double bestDistance(int [] x,int [] y); } 挑战规则: main函数可不用完成。

2013-12-21

理想随机数发生器

更加精彩(个人博客):http://blog.csdn.net/xjm199 一个理想随机数发生器R,给定参数正整数x,它可以均匀随机产生一个闭区间[0,x]之间的实数(注意是实数,每个实数出现的概率相同)R(x)。现在给定3个正整数a,b,c,我们使用a,b产生两个随机实数R(a), R(b),问R(a) + R(b) <= c的概率有多大? 输入: 正整数a,b,c。正整数均不超过10000 输出: R(a) + R(b) <= c的概率。注意输出是一个有理数(分数),请化为最简分数。(分子分母的最大公约数是1)。 例如 输入a = 1, b = 1, c = 4,输出"1/1"

2013-12-21

最小操作次数的简易版--英雄会

更加精彩:http://blog.csdn.net/xjm199 给定两个字符串,仅由小写字母组成,它们包含了相同字符。 求把第一个字符串变成第二个字符串的最小操作次数,且每次操作只能对第一个字符串中的某个字符移动到此字符串中的开头。 例如给定两个字符串“abcd" "bcad" ,输出:2,因为需要操作2次才能把"abcd"变成“bcad" ,方法是:abcd->cabd->bcad。

2013-12-21

整数取反,人人code

个人博客:http://blog.csdn.net/xjm199 题目很简单,完成函数reverse,要求实现把给定的一个整数取其相反数的功能,举两个例子如下: x=123,return321 x=-123,return-321

2013-12-20

[纠错]直方图中矩形最大面积

由于个人原因,上次上传的是练习的,有写问题,这是自己修改后的... 直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]; 那么上述直方图中,面积最大的矩形面积 = 10单位

2013-12-20

寻找直方图中面积最大的矩形

给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。 如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]: 那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积= 10单位。 请完成函数largestRectangleArea,实现寻找直方图中面积最大的矩形的功能,如当给定直方图各小块的高度= [2,1,5,6,2,3] ,返回10。

2013-12-20

最长有效括号的长度

http://blog.csdn.net/xjm199/article/details/17440389 博客中有详细叙述,大家多交流 给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。 再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。 再比如对于"( () () )",它的长度为6。

2013-12-20

c/c++二分查找修改版

if high &lt; low return 1; 找不到 int middle low + high 2; 二分 if x s[middle] return middle; 找到并返回 else if x &lt; s[middle] 关键字小于中值 继续二分查找 并将上限改为middle BinarySearch s x low middle 1 ; else 关键字大于中值 继续二分查找 并将下限改为middle BinarySearch s x middle + 1 high ;">if high &lt; low return 1; 找不到 int middle low + high 2; 二分 if x s[middle] return middle; 找到并返回 else if x &lt; s[middle] 关键字小于中值 继续二分查找 并将上限改为middle BinarySearch s x low middle 1 ; el [更多]

2013-12-02

二分查找修改版

if( high < low) return -1; //找不到 int middle = (low + high) / 2; //二分 if( x < s[middle]) //关键字小于中值,继续二分查找,并将上限改为middle BinarySearch(s, x, low, middle - 1); else if( x > s[middle]) //关键字大于中值,继续二分查找,并将下限改为middle BinarySearch(s, x, middle + 1, high); else return middle; //找到并返回

2013-12-02

c_library库函数

函数名: open 功 能: 打开一个文件用于读或写 用 法: int open(char *pathname, int access[, int permiss]); 程序例: #include <string.h> #include <stdio.h> #include <fcntl.h> #include <io.h> int main(void) { int handle; char msg[] = "Hello world"; if ((handle = open("TEST.$$$", O_CREAT | O_TEXT)) == -1) { perror("Error:"); return 1; } write(handle, msg, strlen(msg)); close(handle); return 0; }

2013-11-28

如何学好编程

不错的总结材料(转的)做成pdf版便于阅读 方法(一) 编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然是不可能的!当我看完了云风的《游戏之旅--编程感悟》和梁肇新的《编程高手箴言》我突然知道我要从何说起,我要怎么说了!

2013-11-26

如何阅读源代码

不错的资源 1.要养成一个习惯, 经常花时间阅读别人编写的高品质代码. 2.要有选择地阅读代码, 同时, 还要有自己的目标. 您是想学习新的模式|编码风格|还是满足某些需求的方法. 3.要注意并重视代码中特殊的非功能性需求, 这些需求也许会导致特殊的实现风格. 4.在现有的代码上工作时, 请与作者和维护人员进行必要的协调, 以避免重复劳动或产生厌恶情绪.

2013-11-26

大整数相乘vector容器

对大整数相乘进行运算,如超过int long等范围的运算,有大量注释,简单易懂,vector容器实现,较于数组更加方便。

2013-11-16

钢条切割-【算法导论-动态规划】

对以上的价格表样例,进行模拟切割: r1 = 1,切割方案1 = 1(无切割) r2 = 5,切割方案2 = 2(无切割) r3 = 8, 切割方案3 = 3(无切割) r4 = 10, 切割方案4 = 2 + 2 r5 = 13, 切割方案5 = 2 + 3 r6 = 17, 切割方案6 = 6(无切割) r7 = 18, 切割方案7 = 1 + 6或7 = 2 + 2 + 3 r8 = 22, 切割方案8 = 2 + 6 r9 = 25, 切割方案9 = 3 + 6 r10 = 30,切割方案10 = 10(无切割) 可能现在大家对这种切割比较不耐烦,或者是有的数并不是那么好,怎么办? 这时有个很好的思想,就是动态规划,之前模拟切割尽管结果出来的很简单,但是过程却依然很复杂; 比如r7,它有很多切割方案,1-6,2-5,3-4,2-2-3,1-1-5等等,这些过程如何自己来模拟的话实在是太费时间,但是我们想在切割7的时候前面都已经完成了,我们可以在前面的基础上进行切割,这时只要考虑1-6,2-5,3-4即可,比如现在的1-6就包括了之前的1-1-5,1-2-4等的切割方案;

2014-04-23

插入排序-《编程珠玑》

详见:http://blog.csdn.net/xjm199/article/details/22733437 简而言之,就是将一个数据很好的插入已经有序的数列中,当然,依然是递增或是递减; 思想:首先第一个数据肯定是有序的,由第二个数据开始处理,进行插入排序:

2014-04-01

变位词《编程珠玑》

若是不明白,详见http://blog.csdn.net/xjm199/article/details/21628091 变位词:一种把某个词或句子的字母的位置(顺序)加以改换所形成的新词,英文叫做anagram,词典把这个词翻译成“变位词”。 书中将这个程序按三个阶段的“管道”组织,其中一个程序的输出文件作为下一个程序的输入文件。第一类程序标识单词,第二个程序排序标识后的文件,而第三个程序将这些单词压缩为每个变位词类一行的形式。

2014-03-20

位图排序《编程珠玑》

详见:http://blog.csdn.net/xjm199/article/details/21476491 实现位图排序,其中假设n为10 000 000,且输入文件包含1 000 000个正数;具体细节详见《编程珠玑》第一章问题; 由于数据的大小问题,在这#define N 1000,即数据在1000以内的100个数据,进行排序(当然由于随机数的产生问题,有数重复,在此并未处理);

2014-03-18

二叉搜索树三种访问方式

http://blog.csdn.net/xjm199/article/details/20062209 更详细,大家多多交流。 先序遍历:也叫做先根遍历,前序遍历,可记做根左右(二叉树父结点向下先左后右)。首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。 即:若二叉树为空则结束返回,否则:(1)访问根结点(2)先序遍历左子树(3)先序遍历右子树 中序遍历:首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。 即:若二叉树为空则结束返回,否则:(1)中序遍历左子树(2)访问根结点(3)中序遍历右子树 后序遍历:首先遍历左子树,然后遍历右子树,最后遍历访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。 即:若二叉树为空则结束返回,否则:(1)后序遍历左子树(2)后序遍历右子树(3)访问根结点

2014-02-28

二叉搜索树

二叉搜索树

2014-02-27

倒排索引处理文档

更多精彩:http://blog.csdn.net/xjm199/article/details/18348671 倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。 有两种不同的反向索引形式: 1、一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。 2、一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。

2014-01-16

堆排序(最大堆修改版)【算法导论】

更多精彩:http://blog.csdn.net/xjm199 上个资源的有效排序下标是由1开始的,0只做了填充作用,这次则由下标0为根节点: for(int i = length; i >= 1;) //最后一个肯定是最小的 { temp = A[i]; //交换堆的第一个元素和堆的最后一个元素 A[i] = A[0]; A[0] = temp; i--; //堆的大小减一 MaxHeapIfy(A, i, 0); //调堆 }

2014-01-08

堆排序最大堆【算法导论】

更多精彩:http://blog.csdn.net/xjm199 欢迎多多交流 ps:按照书中伪码写成,元素由1开始,故数组中第一位A[0]为填充,并不算在排序中。 for(int i = length; i >= 2;) { temp = A[i]; //交换堆的第一个元素和堆的最后一个元素 A[i] = A[1]; A[1] = temp; i--; //堆的大小减一 MaxHeapIfy(A, i, 1); //调堆 }

2014-01-08

二十进制数的加法【庞果网英雄会】

更多精彩:http://blog.csdn.net/xjm199 多多交流.... //start 提示:自动阅卷起始唯一标识,请勿删除或增加。 int main() { printf("%s",calculate("jaa","aa")); return 0; } //end //提示:自动阅卷结束唯一标识,请勿删除或增加。

2014-01-06

菜单命令的路由【VC++】

更多精彩:http://blog.csdn.net/xjm199 void CProject004View::OnTest() { // TODO: Add your command handler code here }

2014-01-01

给定某年某月,输出该月日历

更多精彩:http://blog.csdn.net/xjm199/article/details/17710431 继给定两个日子计算相差天数和给定某个日子,返回在一周的第几天,接下来还有一个给定某年某月,输出该月日历; 其实思想很简单,都是与1900-1-1相减,这样得到每月的第一天星期几,这样便于输出第一行; 接下来将该月剩下的输出即可:

2013-12-31

给定一个日子,返回是一周的第几天

更多精彩:http://blog.csdn.net/xjm199/article/details/17708935 case 0: //今天是星期一... printf("Today是一周的第2天\n"); break; case 1: //今天是星期二...以此类推 printf("Today是一周的第3天\n"); break; case 2: printf("Today是一周的第4天\n"); break; case 3: printf("Today是一周的第5天\n"); break; case 4: printf("Today是一周的第6天\n"); break; case 5: printf("Today是一周的第7天\n"); break; case 6: printf("Today是一周的第1天\n"); break; default: break;

2013-12-31

两个日期相差的天数【编程珠玑】

更多精彩:http://blog.csdn.net/xjm199 int isleapyear(int year) //是否是闰年 { return ((year % 4 == 0 && year % 100 != 0)|| year % 400 == 0); }

2013-12-30

均分01【庞果网 英雄会】

更多精彩:http://blog.csdn.net/xjm199 给定一个字符串,长度不超过100,其中只包含字符0和1,并且字符0和1出现的次数都是偶数。你可以把字符串任意切分,把切分后的字符串任意分给两个人,让两个人得到的0的总个数相等,得到的1的总个数也相等。 例如,输入串是010111,我们可以把串切位01, 011,和1, 把第1段和第3段放在一起分给一个人,第二段分给另外一个人,这样每个人都得到了1个0和两个1。我们要做的是让切分的次数尽可能少。 输入是这样一个字符串,输出是最少的切分次数,保证输入合法。 注:题目一定有解,因为我们最差情况时,把字符串切分(n - 1)次形成n个长度为1的串。

2013-12-30

数组排序【庞果网、英雄会】

更多精彩:http://blog.csdn.net/xjm199 本题来自caopengcs,只要你有兴趣,每个人都可以出题(出题入口在主页右侧边栏“贡献题目”->“我要发布”内), 以下是题目详情: 给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100。 例如: 原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1。 原数组是2,3,1,我们需要交换2和1,变成1,3,2,再交换3和2,变为1,2,3,总共需要的交换次数为2,所以输出2。 函数头部: C/C++ int run(const int *a,int n); java class solution { public static int run(int [] a) }

2013-12-29

VC++菜单命令响应函数

http://blog.csdn.net/xjm199 void CMainFrame::OnTest() { // TODO: Add your command handler code here MessageBox("Test Click!"); }

2013-12-29

VC++设置字体字幕变色

更多精彩:http://blog.csdn.net/xjm199 m_nWidth+=5; CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm); CRect rect; rect.left=0; rect.top=200; rect.right=m_nWidth; rect.bottom=rect.top+tm.tmHeight; dc.SetTextColor(RGB(255,0,0)); CString str; str.LoadString(IDS_STRINGVC); dc.DrawText(str,rect,DT_LEFT); rect.top=150; rect.bottom=rect.top+tm.tmHeight; dc.DrawText(str,rect,DT_RIGHT); CSize sz=dc.GetTextExtent(str); if(m_nWidth>sz.cx) { m_nWidth=0; dc.SetTextColor(RGB(0,255,0)); dc.TextOut(0,200,str); }

2013-12-29

VC++字符输入

更多精彩:http://blog.csdn.net/xjm199 CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm); if(0x0d==nChar) //回车 { m_strLine.Empty(); m_ptOrigin.y+=tm.tmHeight; } else if(0x08==nChar) //退格 { COLORREF clr=dc.SetTextColor(dc.GetBkColor()); dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine); m_strLine=m_strLine.Left(m_strLine.GetLength()-1); dc.SetTextColor(clr); } else { m_strLine+=nChar; } CSize sz=dc.GetTextExtent(m_strLine); CPoint pt; pt.x=m_ptOrigin.x+sz.cx; pt.y=m_ptOrigin.y; SetCaretPos(pt); dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine); CView::OnChar(nChar, nRepCnt, nFlags);

2013-12-28

MFC路径【VC++】

更多精彩:http://blog.csdn.net/xjm199 pDC->BeginPath(); pDC->Rectangle(50,50,50+sz.cx,50+sz.cy); pDC->EndPath(); pDC->SelectClipPath(RGN_DIFF);

2013-12-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除