
数据结构与算法
文章平均质量分 60
Stephan14
这个作者很懒,什么都没留下…
展开
-
字符串匹配
前几天看书,书中有一道联系题:编写一个函数,在该函数中的第一个参数中进行查找,并返回匹配第二个参数所包含的字符的数量。然后,第一种想法就是使用做笨的方法,从第一个参数的字符串从第一个字符开始到最后一个字符逐一进行匹配,为了写起来更简便一点,我借用了一些C语言的库函数,最终代码如下:#include#includeint count_chars( char const *str, char原创 2016-03-07 17:08:40 · 713 阅读 · 0 评论 -
算法训练 区间k大数查询
问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式第一行包含一个数n,表示序列长度。第二行包含n个正整数,表示给定的序列。第三个包含一个正整数m,表示询问个数。接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。输出格式原创 2015-03-18 20:10:40 · 527 阅读 · 0 评论 -
分解质因数
问题描述 求出区间[a,b]中所有整数的质因数分解。输入格式 输入两个整数a,b。输出格式 每行输出一个数的分解,形如k=a1*a2*a3...(a1样例输入3 10样例输出3=34=2*25=56=2*37=78=2*2*29=3*310=2*5提示 先筛出所有素数,然后再原创 2015-03-18 19:04:56 · 738 阅读 · 0 评论 -
芯片测试
问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多。 每个芯片都能用来测试其他芯片。用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏。而用坏芯片测试其他芯片时,会随机给出好或是坏的测试结果(即此结果与被测试芯片实际的好坏无关)。 给出所有芯片的测试结果,问哪些芯片是好芯片。输入格式 输入数据第一行为一个整数n,表示芯片个数。 第原创 2015-03-12 19:41:08 · 955 阅读 · 0 评论 -
FJ的字符串
问题描述 FJ在沙盘上写了这样一些字符串: A1 = “A” A2 = “ABA” A3 = “ABACABA” A4 = “ABACABADABACABA” … … 你能找出其中的规律并写所有的数列AN吗?输入格式 仅有一个数:N ≤ 26。输出格式 请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空原创 2015-03-12 19:40:58 · 859 阅读 · 0 评论 -
最大乘积
输入n个元素组成的序列s,你需要找出一个乘积最大的连续子序列。如果这个最大的成绩不是正数,应输入-1(表示无解)。输入0结束输入。1。样例输入:32 4 -3样例输出:820C语言代码:#include #include int array[1000];int main(int argc,char ** argv)原创 2015-03-30 09:01:54 · 666 阅读 · 0 评论 -
基础练习 Sine之舞
问题描述 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。 不妨设 An=sin(1–sin(2+sin(3–sin(4+...sin(n))...) Sn=(...(A1+n)A2+n-1)A3+...+2)An+1 FJ想让奶牛们计算Sn原创 2015-03-13 12:07:49 · 888 阅读 · 0 评论 -
基础练习 数的读法
问题描述 Tom教授正在给研究生讲授一门关于基因的课程,有一件事情让他颇为头疼:一条染色体上有成千上万个碱基对,它们从0开始编号,到几百万,几千万,甚至上亿。 比如说,在对学生讲解第1234567009号位置上的碱基时,光看着数字是很难准确的念出来的。 所以,他迫切地需要一个系统,然后当他输入12 3456 7009时,会给出相应的念法: 十二亿三千四百五十六万七千零九原创 2015-03-13 12:08:42 · 1112 阅读 · 0 评论 -
除法
除法输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2样例输入:62样例输出:79546/01238=6294736/01528=62分析:只需要枚举fghij就可以算出abcde,然后判断是否需要所有数字不相同即可。C语言代码:#in原创 2015-03-30 08:48:17 · 1381 阅读 · 1 评论 -
2的次幂表示
问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0) 进一步:7=2^2+2+2^0 (2^1用2表示) 3=2原创 2015-03-29 17:30:32 · 811 阅读 · 0 评论 -
最大最小公倍数
算法训练 最大最小公倍数 时间限制:1.0s 内存限制:256.0MB 问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504数据规模与约定1 6。转载 2015-03-29 09:01:23 · 656 阅读 · 0 评论 -
选择问题算法
对于给定的n 个元素的数组A(1 : n ),要求从中找出第k小的元素。如果划分元素v测定在A(j)的位置上,则有j-1个元素小于或等于A(j),且有n-j个元素大于或等于A(j)。因此,若k,则第k小元素在A(1:j-1)中;若k=j,则A(j)就是第k小元素;若k>j,则第k小元素是A(j+1:n)中第(k-j)小元素。所导出的算法如果成SELECT。此过程把第k小元素放在A(k),并划分原创 2015-04-01 01:03:53 · 1441 阅读 · 0 评论 -
基于哈夫曼(haffuman)算法的文件压缩的实现(C语言
基于哈夫曼(haffuman)算法的文件压缩的实现(C语言)(转) 本文首先简要阐述哈夫曼算法的基本思想,然后介绍了使用哈夫曼算法进行文件压缩和解压缩的处理步骤,最后给出了C语言实现的文件压缩和解压缩的源代码。 哈夫曼算法的主要思想是: ①首先遍历要处理的字符串,得到每个字符的出现的次数;转载 2015-04-02 18:41:44 · 2970 阅读 · 0 评论 -
交换两个整数
今天写程序的时候回想起曾经好像在那见过没有使用中间变量进行两个整数的交换,马马虎虎地记得那时通过加减法来实现的,所以就查了一下资料,果然存在这这种方法,代码如下:void swap1 (int& x,int& y){ x=x+y; y=x-y; x=x-y;}void swap2 (int &x,int &y原创 2016-04-07 10:36:38 · 664 阅读 · 0 评论 -
127.Word Ladder
昨天晚上在LeetCode随便选了一道题写会儿代码,选中了Word Ladder,这道题刚开始只是有一点思路,不知道具体往下怎么做,先看看题吗要求如下:Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest transformation sequ原创 2016-03-31 11:07:23 · 862 阅读 · 0 评论 -
递归的应用
递归的应用1.用递归实现从0到n(1)void f1(int n){ if (n >0) { f1(n-1);//打印0-(n-1) } printf("%d\n", n);}(2)void f2(int begin,int end){ if (begin > end) {原创 2015-05-24 16:14:30 · 618 阅读 · 0 评论 -
循环与递归
提起递归,其实大多数的递归都可以转化成循环,因为递归与循环之间存在某种相似性。下面我们来讨论讨论将循环转化成递归的问题。将循环改写成递归,主要分为以下两点:1.寻找相似性,若没有明显的相似性,则可以通过添加参数来主动构造2.寻找递归出口下面来举两个例子:1.给出一个数组,求数组的各项和分析:看到这道题,我们的第一个想法就是利用循环来遍历每一个元素,并求和。但是我们已经说啦,原创 2015-04-06 16:07:09 · 668 阅读 · 0 评论 -
约瑟夫问题
问题内容:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,原创 2015-07-25 14:08:27 · 516 阅读 · 0 评论 -
二叉树的文本模式输出
转自:http://youthlin.com/2014868.html上周一数据结构上机,题目是”二叉树相关算法的实验验证”,其中要求 为便于观察程序的运行结果,设计的输出函数能在输出设备上以图形或表格或其它直观的形式输出计算结果。好吧,比较友好的让他显示树状就行了,可是想了很久就是不知道怎么办。。。上网搜索了一下”输出二叉树“,真正找到两篇有用的文章,一篇是优快云 copica转载 2015-04-24 23:02:29 · 2347 阅读 · 1 评论 -
如何在topcoder上进行算法比赛
原文地址:如何在topcoder上进行算法比赛作者:【如来】topcoder的竞赛页面地址:http://www.topcoder.com/tc topcoder竞赛有算法,软件设计,软件开发,高中生算法竞赛,马拉松赛之分。每次比赛根据最终成绩可赚取rating。成绩优者可赚取一定数量的dollar。 首先需要在topcoder下注册个帐号。填够资料,然后选择你想参加的转载 2015-04-12 11:09:58 · 9057 阅读 · 2 评论 -
最长公共子序列求解:递归与动态规划方法
最长公共子序列求解:递归与动态规划方法 在做OJ题目的时候,经常会用到字符串的处理。例如,比较二个字符串相似度。这篇文章介绍一下求两个字符串的最长公共子序列。 一个字符串的子序列,是指从该字符串中去掉任意多个字符后剩下的字符在不改变顺序的情况下组成的新字符串。 最长公共子序列,是指多个字符串可具有的长度最大的公共的子序列。 (1)递归方法求最长公共子序列的长度转载 2015-04-06 21:26:51 · 817 阅读 · 0 评论 -
归并排序
归并排序(Merge Sort)是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。1、算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。(1)合并过程转载 2015-04-03 23:40:12 · 478 阅读 · 0 评论 -
算法训练 Anagrams问题
问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。 输入格式:输入有两行,分原创 2015-04-03 14:34:03 · 974 阅读 · 0 评论 -
回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。样例输入原创 2015-03-10 23:00:09 · 678 阅读 · 0 评论 -
龟兔赛跑预测
问题描述 话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。对于不同的兔子,t,s原创 2015-03-11 00:25:44 · 997 阅读 · 0 评论 -
十六进制转化八进制
问题描述 给定n个十六进制正整数,输出它们对应的八进制数。输入格式 输入的第一行为一个正整数n (1 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式 输出n行,每行为输入对应的八进制正整数。注意 输入的十六进制数不会有前导0,比如012A。原创 2015-02-25 14:43:09 · 1725 阅读 · 0 评论 -
数列排序
问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1输入格式 第一行为一个整数n。 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。输出格式 输出一行,按从小到大的顺序输出排序后的数列。样例输入58 3 6 4 9样例输出3 4 6 8 9#include #i原创 2015-02-25 10:24:50 · 666 阅读 · 0 评论 -
判断有向图是否有环
第一种方法:拓扑排序对于有向图的拓扑排序,大家都知道的kahn算法:计算图中所有点的入度,把入度为0的点加入栈如果栈非空:如果图中还存在顶点,则表示图中存在环;否则输出的顶点就是一个拓扑排序序列取出栈顶顶点a,输出该顶点值,删除该顶点从图中删除所有以a为起始点的边,如果删除的边的另一个顶点入度为0,则把它入栈如果利用上面的拓扑排序转载 2014-12-19 00:24:28 · 5923 阅读 · 0 评论 -
线索二叉树的线索化和析构
前段时间学习的二叉树的相关操作,现在又开始学习线索二叉树的相关操作,发现网的一些代码有问题,所以写了这篇博客与大家分享,以下这些代码都是我亲自编写以及调试运行过,有什么错的还请大家指出。线索二叉树结点的定义如下:template class T>class ThreadNode{//线索二叉树结点声明private: int LThread,RThread;原创 2014-12-15 10:30:59 · 1077 阅读 · 0 评论 -
入门训练 Fibonacci数列
问题描述Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式输入包含一个整数n。输出格式输出一行,包含一个整数,表示Fn除以10007的余数样例输入10样例输出55样例输入22原创 2015-01-30 20:13:12 · 1851 阅读 · 0 评论 -
入门训练 圆的面积
问题描述给定圆的半径r,求圆的面积。输入格式输入包含一个整数r,表示圆的半径。输出格式输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。说明:在本题中,输入是一个整数,但是输出是一个实数。对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位原创 2015-01-31 10:26:38 · 574 阅读 · 0 评论 -
入门训练 序列求和
问题描述求1+2+3+...+n的值。输入格式输入包括一个整数n。输出格式输出一行,包括一个整数,表示1+2+3+...+n的值。样例输入4样例输出10样例输入100说明:有一些试题会给出多组样例输入输出以帮助你更好的做题。一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数原创 2015-01-31 10:53:46 · 746 阅读 · 0 评论 -
判断无向图中是否有回路
关于无向图判断是否存在回路的方法: 第一种是类似有向图拓扑排序的思路:(参考有向图判断回路的解答) 如果存在回路,则必存在一个子图,是一个环。因此该子图中所有顶点入度>=1。 算法: 在有向图中,先找出入度为0的顶点,删除与这个顶点相关联的边(出边),将与这些边相关的其它顶点的入度减1,循环直到没有入度为0的定点。如果此时还有未被删除顶点,则必存在环路,否则不存在环路。转载 2014-12-15 17:05:10 · 22951 阅读 · 1 评论 -
图的深度优先搜索
转自:http://my.oschina.net/wangxuanyihaha/blog/184302深度优先搜索介绍如果您觉得这篇文章排版不舒服,请到我的微盘下载pdf:搜索算法-深度优先搜索深度优先搜索是一种用来遍历或者搜索树(TREE)或图(GRAPH)结构的算法。搜索开始于某个根节点(从图中选取某个节点),然后在开始回溯前尽可能远地探索到这一支的终点。转载 2014-12-17 13:36:35 · 976 阅读 · 0 评论 -
二叉树的非递归遍历
二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对转载 2014-11-21 00:36:30 · 532 阅读 · 0 评论 -
堆排序之“用最小堆将k个已排序链表合并为一个排序链表”
问题:请给出一个时间为O(nlgk),用来将k个已排序链表合并为一个排序链表的算法。此处的n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并)编程思路:假设k个链表都是非降序排列的。(1)取k个元素建立最小堆,这k个元素分别是k个链表的第一个元素。建堆的时间复杂度O(k)。(2)堆顶元素就是k个链表中最小的那个元素,取出它。时间复杂度O(1)。(转载 2015-01-06 00:00:14 · 881 阅读 · 0 评论 -
随机数发生器
/*数据发生器*/#include #include //rand()和srand()需要#include //time()需要int n = 100, m =100000;double _rand_om (){//生成[0,1]之间的均匀随机数 return (double)rand() /RAND_MAX;}int rand_om (int原创 2015-02-25 21:51:14 · 715 阅读 · 0 评论 -
杨辉三角
问题描述杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。 下面给出了杨辉三角形的前4行: 1 1 1 1 2 1 1 3 3 1 给出n,输出它的前n行。输入格式原创 2015-03-09 12:56:47 · 529 阅读 · 0 评论 -
2n皇后问题
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。输入格式 输入的第一行为一个整数n,表示棋盘的大小。 接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置原创 2015-03-09 09:14:02 · 4028 阅读 · 0 评论 -
基础练习 高精度加法
问题描述 输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。 定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。 计算c = a + b的时候,首先将A[0]与B[0]相加,如果有原创 2015-03-06 22:16:23 · 1596 阅读 · 0 评论