- 博客(237)
- 资源 (5)
- 收藏
- 关注
原创 电话号码对应英语单词
#include #include char *p[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//把所有字符串列出来int total[10] = {0,0,3,3,3,3,3,4,3,4};//每个数字对应的字符串的位数int main(){ char buff[20]; int i; wh
2013-09-26 17:44:18
1189
原创 求随机数构成的数组中找到长度大于=3的最长的等差数列
参考:http://blog.csdn.net/zhanxinhang/article/details/6667868题:求随机数构成的数组中找到长度大于=3的最长的等差数列输出等差数列由小到大: 如果没有符合条件的就输出[0,0]格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5]
2013-09-09 11:32:29
1029
转载 C语言字符串库函数的实现
转载地址:http://www.cnblogs.com/luxiaoxun/archive/2012/09/04/2670202.htmlC语言字符串库函数的实现也是笔试题常考的题目,以下代码没有严格测试,只是简单的实现://字符串长度int strlen(const char *str) { assert(str != NULL); int
2013-09-08 21:33:39
1050
转载 深入理解C++的动态绑定和静态绑定
转载地址:http://blog.csdn.net/chgaowei/article/details/6427731为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象的类型。是在运行期决定的。
2013-09-08 20:12:45
721
原创 已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde 的个数,如果没有返回0,有的话返回子字符串的个数。
已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde 的个数,如果没有返回0,有的话返回子字符串的个数。KMP算法即可解决。#include #include int next[15];void makenext(char *b, int n){ int i = 0; next[i] = -1; int j = -1; while(i<n) {
2013-09-08 13:37:51
1354
1
原创 石子合并
在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。#include #define N 100#define INF 65536 #define min(a,b) a<b?a:b#define max(a,b) a>b?a:
2013-09-05 11:36:55
750
原创 对称字符串的最大长度 — 曼彻斯特算法
题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。以下分析参考:http://blog.csdn.net/hackbuteer1/article/details/6686263回文串定义:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。回文
2013-09-01 21:56:42
4154
转载 Catalan数计算及应用
转载地址:http://blog.csdn.net/wuzhekai1985/article/details/6764858 问题描述:卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。输入一个整数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)
2013-08-31 22:43:33
678
原创 已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量.
已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18
2013-08-31 22:41:35
4429
2
原创 一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值 比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 {3,3}{2,4}{6} m=3 所以m 的最大值为3。#include bool function_core(int *a, int n, int m, int groupsum, int *group, i
2013-08-31 17:06:49
1504
原创 跳台阶问题 — 某阶台阶坏掉
有n阶台阶,一个人一次只能跳一下或者跳两下,其中某一阶台阶坏掉,不能跳到这个坏台阶,问一共有多少种跳法。#include int function(int n, int k){ if(k > n) return 0; if(n==1) return 1; if(n==2) return 2; int f1 = 1; int f2 = 2; int f; for(
2013-08-31 16:23:05
1895
原创 一串首尾相连的珠子(m 个),有N 种颜色(N<=10), 设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短
一串首尾相连的珠子(m 个),有N 种颜色(N#include #include #define N 256int allin(char *b, int *c){ for(unsigned int i=0; i < strlen(b); i++) { if(c[b[i]] == 0) return 0; } return 1;}void find_short
2013-08-29 21:23:14
1906
原创 求一个连通图的割点,割点的定义是,如果除去此节点和与其相关的边,图不再连通,描述算法
参考:http://blog.csdn.net/cxllyg/article/details/7610265 题目:求一个连通图的割点,割点的定义是,如果除去此节点和与其相关的边,图不再连通,描述算法。分析:1. 最简单也是最直接的算法是,删除一个点然后判断连通性,如果删除此点,图不再连通,则此点是割点,反之不是割点(图的连通性一般通过深搜来判定,是否能一次搜索完 全部顶点);
2013-08-29 19:35:31
2871
原创 有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接,问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误
有n 个长为m+1 的字符串, 如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接, 问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。思路:利用弗洛伊德算法可求最长路径。#include #include using namespace std;#define INFINITY -100000 //求最长路径时
2013-08-29 11:23:57
1311
原创 最短路径—弗洛伊德算法
#include #include using namespace std;typedef struct graph{ string vertex[10]; int arc[10][10]; int num_vertex; int num_edge;}graph;int get_location(graph g, string s){ int
2013-08-27 22:38:09
683
原创 n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系, 存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j 的队伍中更强的一支。
n 支队伍比赛,分别编号为0,1,2......n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j 的队伍中更强的一支,所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order[n]中,比如order[n] = {4,3,5,8,1......},那么第一轮比赛就是4 对3, 5 对8。然胜者晋级,败者淘汰,同一轮淘汰
2013-08-27 19:31:57
1413
原创 在人人好友里,A和B是好友,B和C是好友,如果A 和C不是好友,那么C是A的二度好友,在一个有10万人的数据库里,如何在时间0(n)里,找到某个人的十度好友
在人人好友里,A和B是好友,B和C是好友,如果A 和C不是好友,那么C是A的二度好友,在一个有10万人的数据库里,如何在时间0(n)里,找到某个人的十度好友。最短路径问题,每个人一个顶点,是好友距离为1否则为无穷大,输出最小距离为10的顶点就好
2013-08-04 21:31:13
2160
原创 求数组元素的乘积
题目:一个长度为n的数组a[0],a[1],...,a[n-1]。现在更新数组的名个元素,即a[0]变为a[1]到a[n-1]的积,a[1]变为a[0]和a[2]到a[n-1]的积,...,a[n-1]为a[0]到a[n-2]的积。程序要求: 要求具有线性复杂度;不能使用除法运算符。思路:对a[i]的值将其分为两部分a[0]*a[1]*a[2]...*a[i-1]和a[i+1]*a[i
2013-08-04 20:03:55
3792
转载 系统有很多任务,任务之间有依赖,比如B依赖于A,则A执行完后B才能执行
转载地址:http://blog.csdn.net/fivedoumi/article/details/8013063 系统有很多任务,任务之间有依赖,比如B依赖于A,则A执行完后B才能执行(1)不考虑系统并行性,设计一个函数(Task *Ptask,int Task_num)不考虑并行度,最快的方法完成所有任务。(2)考虑并行度,怎么设计 typedef s
2013-08-04 18:42:50
3692
原创 1分2分5分的硬币,组成1角,共有多少种组合
第一种情况:只计算组合总数,不需要列出各种组合设1分个数为x,2分个数为y,5分的硬币个数为z,则1*x+2*y+5*z=10;5*z=10-x-2*y;即:当z=0时,x可以取得值为10、8、6、4、2、0 (6种)当z=5时,x可以取得值为5、3、1 (3种)当z=10时,x可以取得值为0 (1种)总的组合数为6+3+1=10种因此,按照规律,本题目组合总数
2013-08-04 18:20:59
2302
1
原创 小白鼠检测毒药问题
我们有很多瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。现在有5只小白鼠,请问一下,我们用这五只小白鼠,5分钟的时间,能够检测多少瓶液体的成分?解析:可以检测2^5=32瓶液体的成分。我们以3只小白鼠为例子,3只小白鼠可以检测2^3=8瓶液体成分,具体分析如下:第一只小白鼠喝下1、3、5、7瓶液体,第二只小白鼠
2013-08-04 11:01:07
5121
转载 将多个集合合并成没有交集的集合
给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}。(1)请描述你解决这个问题的思路;(2)请给出主要的处理流程,算法,以及算法的复杂度(3)请描述可
2013-08-04 10:31:59
949
原创 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10()
1.rand7执行两次,出来的数为a1=rand7()-1,a2=rand7()-1. 2.如果a1*7+a2=40,重复第一步。#include #include #include int rand7(){ return rand()%7+1;//产生随机数1~7}int rand10(){ int a1,a2,a3; do { a1 = rand7()-
2013-08-03 19:47:21
1078
原创 五只猴子分桃问题
题目:五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;.....其他几只猴子也都是 这样分的。问:这堆桃至少有多少个?分析:设开始有x个桃子,我们把x写成(x+4)-4. 第一个猴子来了,吃掉1个,还有桃子 (x+4
2013-08-03 19:18:55
3961
转载 找单链表环的入口点
转载地址:http://blog.csdn.net/wuzhekai1985/article/details/6725263 问题1:如何判断单链表中是否存在环(即下图中从结点E到结点R组成的环)? 设一快一慢两个指针(Node *fast, *low)同时从链表起点开始遍历,其中快指针每次移动长度为2,慢指针则为1。则若无环,开始遍历之后fast不可能与low重合,
2013-07-25 17:17:15
676
原创 字符串移位包含的问题
题目:给定两个字符串是s1和s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。例如,给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。#include #include using namespace std;int main(){ string s1,s2,s3; cout<<"请输入字符串:"; cin>>s1
2013-07-25 15:27:47
546
原创 单链表中的数相加
你有两个由单链表表示的数。每个结点代表其中的一位数字。数字的存储是逆序的,也就是说个位位于链表的表头。写一函数使这两个数相加并返回结果,结果也由链表表示。#include using namespace std;typedef struct Node{ int value; struct Node *next;}Node,*pNode;pNode create_list(in
2013-07-10 15:36:25
810
原创 如果矩阵中某个元素为0,那么把它所在的行和列都置为0
遍历一次矩阵,当遇到元素等于0时,记录下这个元素对应的行和列。可以开一个行数组row和列数组col,当元素a[i][j]等于0时,就把row[i]和col[j]置为true。第二次遍历矩阵时,当某个元素对应的行row[i] 或列col[j]被设置为true,说明该元素在需要被置0的行或列上,因此将它置0。#include #include using namespace std;#de
2013-07-09 15:51:07
2490
原创 矩阵翻转90度
矩阵逆时针翻转90度:假设矩阵中一数字坐标为(i,j),逆时针翻转后的坐标为(n-1-j,i),要实现这一过程,首先(i,j)->(j,i),即沿着左对角线将对角线两侧的数字交换,之后(j,i)->(n-1-j,i),即将矩阵沿着横中轴将上下行中的元素进行交换,如果是4*4矩阵,也就是交换1,4行和交换2,3行;矩阵顺时针翻转90度:假设矩阵中一数字坐标为(i,j),顺时针翻转后的坐标
2013-07-08 16:46:56
3249
原创 C++学习笔记
1、为了减少时间开销,如果在类体中定义的成员函数中不包括循环等控制结构,C++系统会自动将它们作为内置(inline)函数来处理。2、在指定默认参数时,一般只需在函数声明时指定,函数定义时不必重复指定默认参数。如果函数定义时也指定了默认参数,其值应与函数声明时一致,如果不一致,编译系统以函数声明时指定的默认参数值为准,函数定义时指定的默认参数不起作用。3、在一个类中定义了全部是默认参数
2013-07-05 16:06:03
557
原创 判断大小端
#include union test{ int a; char b;};int main(){ union test t; t.a = 0x12345678;//如果是小端 在内存中从低地址到高地址依次存放 78 56 34 12 //如果是大端 在内存中从低地址到高地址依次存放 12 34 56 78 printf("%x\n",t.b);//如果是小端 打
2013-07-04 15:00:52
458
原创 输入n,输出对应的所有长度为n的二进制串
#include #include #include using namespace std;void print(int n){ int max = (int)pow((double)2,(double)n); unsigned int mask = 0x00000001; int i,j; stack stack1; for(i=0;i<max;i++) { for
2013-07-04 11:34:31
1997
原创 最短路径—迪杰斯特拉算法
#include #include using namespace std;typedef struct Graph{ string vertex[10]; int arc[10][10]; int num_vertex; int num_edge;}Graph;int get_location(Graph g, string s){ int
2013-07-03 11:38:41
734
原创 最小生成树—克鲁斯卡尔算法
#include #include using namespace std;typedef struct Edge//边集数组{ int begin;//边起始下标 int end;//边终止下标 int weight;//边权重}Edge;typedef struct Graph{ string vertex[10]; Edge edge[
2013-07-03 09:35:37
585
原创 qsort函数
/************************************************************************************************************************** void qsort(void *base, int nelem, unsigned int width, int (*cmp)(const void
2013-07-02 17:17:17
594
原创 最小生成树—普里姆算法
普利姆算法实际上就是用一个数组存储最小生成树中的顶点,然后不断寻找这么一条边:边的一端是存在数组中的顶点,即最小生成树中的顶点,另一条边是最小生成树外的顶点,在满足这个条件下找到路径权值最小的边,并将边中原先并不在最小生成树中的顶点加入到最小生成树中,最终数组中的顶点即最小生成树的顶点数量等于图的顶点数量。算法时间复杂度:0(n^2),适用于稠密图#include #include u
2013-07-02 10:46:42
750
原创 判断有向图是否存在回路—拓扑排序
#include #include #include using namespace std;typedef struct Edgenode{ int adjvex; struct Edgenode *next;}Edgenode;typedef struct Vertexnode{ string data; Edgenode *firstedge;}Vertexno
2013-07-02 08:59:00
4705
原创 图的基本操作:图的创造(基于邻接表)、深度搜索(DFS)、广度搜索(DFS)
#include #include #include using namespace std;typedef struct Edgenode//边表结点{ int adjvex;//存储该节点对应的下标 struct Edgenode *next;//指向下一个边表结点}Edgenode;typedef struct Vertexnode//顶点表结点
2013-07-01 17:12:38
662
原创 图的基本操作:图的创造(基于邻接矩阵)、深度搜索(DFS)、广度搜索(DFS)
#include #include #include using namespace std;typedef struct Graph{ string vexs[10];//顶点表 int arc[10][10];//邻接矩阵 int num_vertex;//顶点数 int num_edge;//边数}Graph;bool visited[10
2013-07-01 16:02:39
793
原创 贪心算法—删数问题
给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数最小的删数方案。算法的原理应该是说从最高位开始,一次向低位搜索,一旦遇到前一位(高位)的数大于当前位,则删去前一位,直到删除k个数,如果到达末尾还没有删除k个,则说明现在这个数已经是从小到大排序了,则从最低位开始删除要求的位数。#i
2013-06-28 17:24:14
8525
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人