- 博客(94)
- 资源 (11)
- 收藏
- 关注
原创 解题笔记(40)——第1-39篇合集
2011年7月至今,解题笔记系列已有39篇文章,本文做一个归纳及索引,方便网友阅读参考。其中的题目多出自两个博客,一个是JULY的,另一个是何海涛的。上面有题目,也有解题思路及代码。 JULY的博客 http://blog.csdn.net/v_JULY_v/ar
2011-10-07 11:09:06 21642 26
原创 解题笔记(39)——过河问题
问题描述:在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那
2011-10-06 16:05:29 14874 5
原创 解题笔记(38)——大整数阶乘计算
问题描述:求一个整数 n 的阶乘,0 比如n = 50,结果为30414093201713378043612608166064768844377641568960512000000000000 思路:从阶乘的定义出发,n! = n * (n-
2011-10-05 22:36:03 10267 8
原创 解题笔记(37)——Catalan数计算及应用
问题描述:卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。输入一个整数n,计算h(n)。其递归式如下:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2,h(0) = h(1) = 1) 该递推关
2011-09-10 09:17:11 32053 19
原创 解题笔记(36)——最大公约数问题
问题描述:求两个正整数的最大公约数。 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) (x >=y > 0)。根据通式写出算法不难,这里
2011-09-05 20:37:39 9242
原创 一些字符串及内存操作的函数
本文给出了一些字符串及内存操作的函数的实现:memcpy、memset、memmove、strcpy、strcmp、strlen、strstr、strcat,为了与标准区分,所有函数名前加了下划线。下面给出这些函数的实现。如果错误,还请读者指正。//函数功能: 拷贝不重叠
2011-09-03 14:31:54 9016 6
原创 解题笔记(35)——旋转数组中的最小元素
问题描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。 思路:这道题最直观的解
2011-08-30 21:58:51 12324 4
原创 解题笔记(34)——求最长单调递减子序列
问题描述:求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}。 思路:这是很经典的一个问题,用动态规划解决。假设源数组为A,定义一个辅助数组为B,B[i]表示以A[i]结尾的最长递减序列的长度。举个简单
2011-08-30 19:41:02 15111 4
原创 解题笔记(33)——按层次遍历二元树
问题描述:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / / 6 10/ / / /5 7 9 11输出8 6 10 5 7 9 11。
2011-08-29 19:13:07 18232 1
原创 解题笔记(32)——输入一颗二元查找树,将该树转换为它的镜像
问题描述:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 例如输入: 8 / / 6 10 //
2011-08-29 14:37:29 12063 4
原创 解题笔记(31)——从数列1,2...n中随意取几个数,使其和等于m
问题描述:输入两个整数n和m,从数列1,2.......n中随意取几个数,使其和等于m,要求将其中所有的可能组合列出来。 思路:这个问题其实背包问题的变形,本文给出两种解法。 解法一:用递归,效率可能低了点。假设问题的解为F(n, m)
2011-08-29 11:37:21 21149 4
原创 有点意思的C/C++问题及解答:21-25
问题21:判断C编译器是否支持嵌套注释。 解法:嵌套注释是指在/* */ 中出现/* ... */,定义这个式子: /*/*/0*/**/1 。如果编译器不支持嵌套注释,那么这个式子为0*1。如果支持嵌套注释,那么这个式子为1。摘自《C陷阱与缺陷》。
2011-08-28 15:26:46 7786 1
转载 解题笔记(30)——找含单链表的环入口点(转网上某位高手的解法)
原文出处 http://hi.baidu.com/iwitggwg/blog/index/1 很不错。 问题1:如何判断单链表中是否存在环(即下图中从结点E到结点R组成的环)? 设一快一慢两个指针(Node *fast, *low)同时从
2011-08-27 20:22:37 27156 15
原创 解题笔记(30)——找含单链表的环入口点
问题描述:有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。如果链表存在环,找到环的入口点? 思路:这道题的原型可能来自《C专家编程》一书,题目为”怎样才能检测到链表中存在循环“,书中给出的最终算
2011-08-27 16:17:20 9489 2
原创 解题笔记(29)——珠子问题
问题描述:一串首尾相连的珠子(n个),有N种颜色(N 思路:可以利用一种计数的方法。定义两个指针p1和p2,主要有三个步骤: (1)p1向前移动,如果p1所指的珠子颜色编号为 i ,则增加 i 的出现次数。当出现的颜色种数为N时,p1停止
2011-08-27 12:43:30 9274 2
原创 解题笔记(28)——寻找捣乱分子对
问题描述:多人排成一个队列,我们认为从低到高是正确的序列,但是总有部分人不遵守秩序。如果说,前面的人比后面的人高(两人身高一样认为是合适的),那么我们就认为这两个人是一对“捣乱分子”,比如说,现在存在一个序列:176, 178, 180, 170, 171 这些捣乱
2011-08-25 14:25:55 9939
原创 解题笔记(27)——找数组中的特定元素
问题描述:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。 思路:如果能用两个辅助数组,那么相对来说简单一点,可定义数组Min和数组Max,其中Min[i
2011-08-24 21:19:44 8675 1
原创 解题笔记(26)——排队问题
问题描述:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 思路:可以用递归来解决。假设已按高矮顺序编号从0到11,即0号最矮、11号最高,(i, j)表示某个人在队列中的位置。对于0号只能排在(0, 0
2011-08-23 21:45:29 8447 4
原创 解题笔记(25)——把数组排成最小的数
问题描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。 思路:先将整数数组转为字符串数组,然后字符串数组进行排序,最后依
2011-08-21 10:40:51 20737 9
原创 解题笔记(24)——找出数组中两个只出现一次的数字(数组)
问题描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 思路:如果只有一个数字只出现一次,而其他都出现两次,则直接将所有数字做一次异或运算即可,因为相等的数字异或一下结果为
2011-08-20 18:57:03 13701 1
转载 智力题(2)
摘自:http://www.cnitblog.com/zouzheng/articles/21826.html1.有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间?答:把两根香同时点起来,第一支香两头点着,另一支香只烧一头,等第一支
2011-08-19 16:34:52 4287 1
转载 智力题(1)
摘自:http://www.cnitblog.com/zouzheng/articles/21836.html1. 一个粗细均匀的长直管子,两端开口,里面有4个白球和4个黑球,球的直径、两端开口的直径等于管子的内径,现在白球和黑球的排列是wwwwbbbb,要求不取出任何一个球
2011-08-18 17:31:16 3418
原创 代码开源(7)——测试程序执行时间
本文介绍两种测试程序时间的方法,一种是通过间隔计数,另一种通过周期计数器。针对这两种方法,分别给出Windows和 UNIX 下的实现。 首先介绍这两种方法的含义,摘自《深入理解计算机系统》。间隔计数:操作系统维护者每个进程使用的用户时间量和系统时间量的计数值,当
2011-08-14 21:35:48 4838
原创 解题笔记(23)——一个线程竞争的问题
下面这个程序存在竞争,当对等线程执行 int myid = *((int *)argv) 前,如果主线程先执行了 i++,那么对等线程的执行结果是不正确。#include #include #define N 100void *thread(void *arg
2011-08-13 22:03:28 2201
原创 代码开源(6)——UNIX并发编程
之前在代码开源(3)——UNIX中CS简单实现 给出的代码,存在一个问题,那就是只支持单个连接。本文整理给出了三种方法:多进程、IO多路复用、多线程,主要参考《深入理解计算机系统》一书。对源码做了修改整理,加了些批注。下面一一给出,只修改服务器端的主程序,客户端代码不变。其中用到
2011-08-13 19:32:07 2496
原创 代码开源(5)——彩色bmp图片转灰度
下面这个程序可以将一个彩色的bmp格式图片转换灰度图片:#include #include #include /*BMP文件格式如下:㈠BITMAPFILEHEADER:位图文件头(只用于BMP文件) bfType="BM" bfSize
2011-08-12 21:35:22 3498
原创 代码开源(4)——Windows 中CS简单实现
介绍Windows中,TCP/IP的建立过程,只是一个最简单的实现。VS2008中测试通过。#include<winsock.h> #include<stdio.h>
2011-08-12 21:28:00 2322
原创 代码开源(3)——UNIX中CS简单实现
主要摘自《深入理解计算机系统》一书,略作整理,加了些备注。可以简单了解一下UNIX网络编程。下面程序已在Ubuntu9.10下测试通过。 客户端主程序:#include "client.h"int main(int argc, char **arg
2011-08-12 21:16:11 2707
原创 代码开源(2)——UNIX 健壮I/O函数
摘自《深入理解计算机系统》一书,几个IO读写的封装函数。一共是两类,一是无缓冲的输入输出函数;二是带缓冲的输入函数。这几个函数有一个共同点,就是比较好的处理了“不足值”的情况。所谓“不足值”是指read和write函数传送的字节比应用程序要求的要少。下面几种情况可能会出现不足值:
2011-08-12 20:55:14 3689
原创 代码开源(1)——数据库部分操作封装C#实现
曾做过几个ASP.NET的项目,其中大量用到数据库操作,因此单独写了个类,方便使用。SqlConnection , SqlCommand ,ExecuteNonQuery,ExecuteScalar,SqlDataAdapter,DataSet
2011-08-11 17:10:10 3919
原创 代码开源——前言
学了不少年的计算机,做了一些小项目,写了些程序。有些代码,个人觉得挺有用的,略作整理,放在博客上,就当备份了。欢迎各位网友来踩,若对各位有所帮助,在下不甚荣幸。若有什么疑问或是建议,也可以给我留言,交流交流,共同进步。 所贴代码,各位网友尽可使用,不存在什么版权问
2011-08-11 16:58:47 3221
原创 设计模式C++实现(16)——状态模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大
2011-08-10 14:58:17 28595 21
原创 设计模式C++实现(15)——观察者模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大
2011-08-10 11:13:02 60062 35
原创 设计模式C++实现(14)——职责链模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。职责链模式
2011-08-09 21:22:01 20087 17
原创 设计模式C++实现(13)——中介者模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。中介者模式。
2011-08-09 20:23:02 21724 9
原创 设计模式C++实现(12)——备忘录模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大
2011-08-09 16:35:15 17871 9
原创 设计模式C++实现(11)——装饰模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大
2011-08-09 15:11:18 35407 27
原创 设计模式C++实现(10)——桥接模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大
2011-08-08 20:54:55 23836 13
原创 设计模式C++实现(9)——享元模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大
2011-08-08 19:43:27 25420 43
原创 设计模式C++实现(8)——代理模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大
2011-08-08 15:05:43 35417 15
Ubuntu9.04下安装SimpleScalar
2009-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人