算法与数据结构
主要写一些基础算法,还有一些基本数据结构,在掌握这些算法的基础上进一步去开阔思维,多设计一些有用的算法。
斗 鹰
涉及JavaEE,数据结构与算法以自己平时写代码一些bug。
展开
-
数据结构之链表增删改查实现方式(Java)
链表链表是一种在物理上非连续、非顺序的数据结构,由若干个节点(node)所组成。单向链表的每一个节点又包含两部分,一部分是存放数据的变量data,另一部分是指向下一个节点的指针next。链表的第一个节点被称为头节点,最后一个节点被称为尾节点,尾节点的next指针指向空。链表是通过其中的next属性来确定下一个节点,来顺序存储。如图:下面主要说一下单链表的增删改查的实现方式以及...原创 2019-08-15 16:21:16 · 841 阅读 · 6 评论 -
简单密码
描述:Julius Caesar曾经使用过一种很简单的密码。对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这样就得到了密文。比如字符A用F来代替。如下是密文和明文中字符的对应关系。密文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z明文:V W X Y Z A B C D E F G H I J K L M N ...原创 2018-12-30 11:31:41 · 749 阅读 · 0 评论 -
密码翻译
描述:在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。输入:输入一行,包含一个字符串,长度小于80个字符。输出:...原创 2018-12-30 10:53:17 · 2260 阅读 · 2 评论 -
字符替换
描述:把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。输入:只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。字符串是待替换的字符串,字符串长度小于等于30个字符,且不含空格等空白符;接下来一个字符为需要被替换的特定字符;接下来一个字符为用于替换的给定字符。输出:一行,即替换后的字符串。样例输入:hello-how-are-you...原创 2018-12-29 10:38:21 · 1824 阅读 · 1 评论 -
配对碱基链
描述:脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成。而构成DNA的碱基共有4种,分别为腺瞟呤(A)、鸟嘌呤(G)、胸腺嘧啶(T)和胞嘧啶(C)。我们知道,在两条互补碱基链的对应位置上,腺瞟呤总是和胸腺嘧啶配对,鸟嘌呤总是和胞嘧啶配对。你的任务就是根据一条单链上的碱基序列,给出对应的互补链上的碱基序列。输入:一个字符串,表示一条碱基链。这个字符串只含有大写字母A、...原创 2019-01-03 22:39:16 · 1002 阅读 · 0 评论 -
合法 C 标识符
描述:给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:题目保证这些字符串一定不是C语言的保留字)。C语言标识符要求:1. 非保留字;2. 只包含字母、数字及下划线(“_”)。3. 不以数字开头。输入:一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于20。输出:一行,如果它是C语言的合法标识符,则输出yes,否则输出no。...原创 2018-12-29 10:22:18 · 1086 阅读 · 0 评论 -
石头剪子布
描述:石头剪子布,是一种猜拳游戏。起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则,使得石头剪子布没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得石头剪子布这个古老的游戏同时用于“意外”与“技术”两种特性,深受世界人民喜爱。 游戏规则:石头打剪刀,布包石头,剪刀剪布。 现在,需要你写一个程序来判断石头剪子布...原创 2018-12-28 12:07:49 · 327 阅读 · 0 评论 -
统计数字字符个数
描述:输入一行字符,统计出其中数字字符的个数。输入:一行字符串,总长度不超过255。输出:输出为1行,输出字符串里面数字字符的个数。样例输入:Peking University is set up at 1898.样例输出:4算法:#include<stdio.h>#include<string.h>#d...原创 2018-12-26 19:00:57 · 6756 阅读 · 0 评论 -
输出亲朋字符串
描述:编写程序,求给定字符串s的亲朋字符串s1。 亲朋字符串s1定义如下:给定字符串s的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个亲朋字符; 给定字符串s的第二个字符的ASCII值加第三个字符的ASCII值,得到第二个亲朋字符;依此类推,直到给定字符串s的倒数第二个字符。亲朋字符串的最 后一个字符由给定字符串s的最后一个字符ASCII值加s的第一个字符的ASCII值。...原创 2018-12-27 12:25:57 · 935 阅读 · 0 评论 -
基因相关性
描述:为了获知基因序列在功能和结构上的相似性,经常需要将几条不同序列的DNA进行比对,以判断该比对的DNA是否具有相关性。现比对两条长度相同的DNA序列。首先定义两条DNA序列相同位置的碱基为一个碱基对,如果一个碱基对中的两个碱基相同的话,则称为相同碱基对。接着计算相同碱基对占总碱基对数量的比例,如果该比例大于等于给定阈值时则判定该两条DNA序列是相关的,否则不相关。输入:有...原创 2018-12-27 12:14:04 · 2699 阅读 · 4 评论 -
计算2的n次方
描述:任意给定一个正整数N(N<=100),计算2的n次方的值。输入:输入一个正整数N。输出:输出2的N次方的值。样例输入:5样例输出:32核心思想:计算2的n次方也是依次相乘2,大于个位则进位,从后向前保存元素,所以要令初始值为1.算法:#include<stdio.h>int main(){ int ...原创 2019-02-14 15:37:00 · 10963 阅读 · 4 评论 -
大整数减法
描述:求两个大的正整数相减的差。输入:共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。输出:一行,即所求的差。样例输入:99999999999999999999999999999999999999999999999999样例输出:9999999999999999999999990000...原创 2018-12-20 18:06:23 · 604 阅读 · 1 评论 -
大整数加法
描述:求两个不超过200位的非负整数的和。输入:有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出:一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。样例输入:2222222222222222222233333333333333333333样例输出:55555555555555555...原创 2018-12-19 16:25:08 · 472 阅读 · 4 评论 -
角谷猜想
描述:所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。 程序要求输入一个整数,将经过处理得到1的过程输出来。输入:一个正整数N(N <= 2,000,000)输出:从输入整数到1的步骤,每一步为一行,每一部中描述计...原创 2018-12-05 20:35:03 · 2681 阅读 · 4 评论 -
分离整数的各个数位
描述:给定一个整数,要求从个位开始分离出它的每一位数字。输入:输入一个整数,整数在1到100000000之间。输出:从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。样例输入:123样例输出:3 2 1算法:#include<stdio.h>int main(){ int n...原创 2018-12-05 20:31:04 · 7118 阅读 · 0 评论 -
杨辉三角算法的实现(java)
杨辉三角形有数字排列,可以把它看做一个数字表,其基本特性是两侧数值均为1,其他位置的数值是其正上方与左上角数值之和。这里给出两种实现方法。第一种: 再创建的YanghuiTriabgle类中的主方法创建一个二维数组,并指定二维数字的第一维长度,这个数组同于存放杨慧三角形的数值表,通过双层for循环来实现第二维数组的长度,然后计算整个数组的每个元素的值。关...原创 2018-10-03 22:48:07 · 7096 阅读 · 0 评论 -
画矩形
描述:根据参数,画出矩形。输入:输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。输出:输出画出的图形。样例输入:7 7 @ 0样例输出:@@@@@@@@ ...原创 2018-12-11 22:22:29 · 5718 阅读 · 1 评论 -
求出e的值
描述:利用公式e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 求e 。输入:输入只有一行,该行包含一个整数n(2<=n<=15),表示计算e时累加到1/n!。输出:输出只有一行,该行包含计算出来的e的值,要求打印小数点后10位。提示:1、e以及n!用double表示2、要输出浮点数、双精度数小数点后10位数字,可...原创 2018-12-11 21:43:59 · 7556 阅读 · 1 评论 -
统计满足条件的4位数个数
描述:给定若干个四位数,求出其中满足以下条件的数的个数: 个位数上的数字减去千位数上的数字,再减去百位数上的数字, 再减去十位数上的数字的结果大于零。输入:输入为两行,第一行为四位数的个数n,第二行为n个的四位数,数与数之间以一个空格分开。(n <= 100)输出:输出为一行,包含一个整数,表示满足条件的四位数的个数。样例输入:51234 13...原创 2018-12-11 22:07:31 · 5362 阅读 · 0 评论 -
求分数序列和
描述:有一个分数序列 q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,.... ,其中qi+1= qi+ pi, pi+1=qi, p1= 1, q1= 2。比如这个序列前6项分别是2/1,3/2,5/3,8/5,13/8,21/13。求这个分数序列的前n项之和。输入:输入有一行,包含一个正整数n(n <= 30)。输出:输出有一行,包含一个浮点数...原创 2018-12-10 12:21:32 · 4008 阅读 · 0 评论 -
数字反转
描述:给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。输入:输入共 1 行,一个整数N。-1,000,000,000 ≤ N≤ 1,000,000,000。输出:输出共 1 行,一个整数,表示反转后的新数。样例输入:样例 #1:123样例 ...原创 2018-12-10 12:21:08 · 962 阅读 · 0 评论 -
救援
描述:救生船从大本营出发,营救若干屋顶上的人回到大本营,屋顶数目以及每个屋顶的坐标 和人数都将由输入决定,求出所有人都到达大本营并登陆所用的时间。 在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表 示。救生船每次从大本营出发,以速度50 米/分钟驶向下一个屋顶,达到一个屋顶后,救下其上的所有人,每...原创 2018-12-09 16:26:33 · 323 阅读 · 0 评论 -
人口增长问题
描述:我国现有x亿人口,按照每年0.1%的增长速度,n年后将有多少人?输入:一行,包含两个整数x和n,分别是人口基数和年数,以单个空格分隔。输出:输出最后的人口数,以亿为单位,保留到小数点后四位。1 <= x <= 100, 1 <= n <= 100。样例输入:13 10样例输出:13.1306算法:#in...原创 2018-12-09 16:20:08 · 7652 阅读 · 2 评论 -
药房管理
描述: 随着信息技术的蓬勃发展,医疗信息化已经成为医院建设中必不可少的一部分。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医疗过程中,从而极大地提高了医院整体的工作效率。 对药品的管理是其中的一项重要内容。现在药房的管理员希望使用计算机来帮助他管理。假设对于任意一种药品,每天开始工作时的库存总...原创 2018-12-07 21:18:10 · 1069 阅读 · 0 评论 -
津津的储蓄计划
描述:津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里...原创 2018-12-07 21:08:17 · 592 阅读 · 0 评论 -
雇佣兵
描述:雇佣兵的体力最大值为M,初始体力值为0、战斗力为N、拥有X个能量元素。当雇佣兵的体力值恰好为M时,才可以参加一个为期M天的战斗期,战斗期结束体力值将为0。在同一个战斗期内,雇佣兵每连续战斗n天,战斗力就会上升1点,n为当前战斗期开始时的战斗力。一个战斗期结束后,雇佣兵需要用若干个能量元素使其体力恢复到最大值M,从而参加下一个战斗期。每个能量元素恢复的体力值不超过当前的战斗...原创 2018-12-07 21:02:30 · 1016 阅读 · 0 评论 -
含k个3的数
描述:输入两个正整数 m 和 k,其中1 < m < 100000,1 < k < 5 ,判断 m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。 例如,输入: 43833 3 满足条件,输出YES。如果输入:39331 3 尽管有3个3,但不能被19整除,也不满足条件,应输出NO。输入:m 和 k 的值,...原创 2018-12-06 19:30:35 · 7546 阅读 · 0 评论 -
球弹跳高度的计算
这个题就很基础了,想当年还是参加蓝桥杯的题目,把球弹跳的过程在脑子中走一遍,就知道给出的问题怎样求解了,来看题吧!描述:一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第10次落地时,共经过多少米? 第10次反弹多高?输入:输入一个整数h,表示球的初始高度。输出:输出包含两行:第1行:到球第10次落地时,一共...原创 2018-12-06 19:22:03 · 3353 阅读 · 0 评论 -
第n小的质数
描述:输入一个正整数n,求第n小的质数。输入:一个不超过10000的正整数n。输出:第n小的质数。样例输入:10样例输出:29算法:#include<stdio.h>#include<math.h>int isPrime(int num) //判断是否为质数的方法{ if(num ...原创 2018-12-06 19:14:53 · 6791 阅读 · 0 评论 -
鸡尾酒疗法
描述: 鸡尾酒疗法,原指“高效抗逆转录病毒治疗”(HAART),由美籍华裔科学家何大一于1996年提出,是通过三种或三种以上的抗病毒药物联合使用来治疗艾 滋病。该疗法的应用可以减少单一用药产生的抗药性,最大限度地抑制病毒的复制,使被破坏的机体免疫功能部分甚至全部恢复,从而延缓病程进展,延长患者生 命,提高生活质量。人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证...原创 2018-12-06 19:07:01 · 3238 阅读 · 0 评论 -
乘方计算
描述:给出一个整数a和一个正整数n,求乘方an。输入:一行,包含两个整数a和n。-1000000 <= a <= 1000000,1 <= n <= 10000。输出:一个整数,即乘方结果。题目保证最终结果的绝对值不超过1000000。样例输入:2 3样例输出:8算法:#include<stdio.h&...原创 2018-12-06 19:03:01 · 3166 阅读 · 1 评论 -
整数序列的元素最大跨度值
描述:给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。 输入:一共2行,第一行为序列的个数n(1 <= n <= 1000),第二行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。输出:输出一行,表示序列的最大跨度值。样例输入:63 0 8 7 5 9样例输出:9算法...原创 2018-12-06 19:00:04 · 3581 阅读 · 7 评论 -
奥运奖牌计数
描述:2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数。输入:输入n+1行,第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目,以一个空格分开。输出:输出1行,包括4个整数,为A国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。样例输入:3...原创 2018-12-06 18:55:15 · 1408 阅读 · 0 评论 -
向量点积计算
描述:在线性代数、计算几何中,向量点积是一种十分重要的运算。给定两个n维向量a=(a1,a2,...,an)和b=(b1,b2,...,bn),求点积a·b=a1b1+a2b2+...+anbn。输入:第一行是一个整数n。1 <= n <= 1000。第二行包含n个整数a1,a2,...,an。第三行包含n个整数b1,b2,...,bn。相邻整数之间用...原创 2018-12-04 20:45:21 · 10375 阅读 · 2 评论 -
石头剪刀布
描述:石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小A和小B比了N轮之后,谁赢的轮数多?输入:输入包含三行。第一行包含三个整数:N,NA,NB,分...原创 2018-12-04 20:28:01 · 2778 阅读 · 0 评论 -
有趣的跳跃
描述:一个长度为n(n>0)的序列中存在“有趣的跳跃”当前仅当相邻元素的差的绝对值经过排序后正好是从1到(n-1)。例如,1 4 2 3存在“有趣的跳跃”,因为差的绝对值分别为3,2,1。当然,任何只包含单个元素的序列一定存在“有趣的跳跃”。你需要写一个程序判定给定序列是否存在“有趣的跳跃”。输入:一行,第一个数是n(0 < n < 3000),为序列长度...原创 2018-12-04 19:51:50 · 7475 阅读 · 1 评论 -
校门外的树
描述:某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区...原创 2018-12-04 19:22:47 · 990 阅读 · 0 评论 -
数组逆序重放
描述:将一个数组中的值按逆序重新存放。例如,原来的顺序为1,2,3,4,5。要求改为5,4,3,2,1。输入:输入为两行:第一行数组中元素的个数n(1<n<100),第二行是n个整数,每两个整数之间用空格分隔。输出:输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。样例输入:51 2 3 4 5样例输出:5 4 3 2 1 ...原创 2018-12-03 13:25:10 · 3102 阅读 · 0 评论 -
年龄与疾病
描述:某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理,按照0-18、19-35、36-60、61以上(含61)四个年龄段统计的患病人数占总患病人数的比例。输入:共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄。输出:按照0-18、19-35、36-60、61以上(含61)四个年龄段输出该...原创 2018-12-03 13:18:59 · 924 阅读 · 0 评论 -
质因数分解
描述:已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数。输入:输入只有一行,包含一个正整数 n。对于60%的数据,6 ≤ n ≤ 1000。对于100%的数据,6 ≤ n ≤ 2*10^9。输出:输出只有一行,包含一个正整数 p,即较大的那个质数。样例输入:21样例输出:7算法:#include<stdio.h...原创 2018-12-02 11:18:12 · 546 阅读 · 0 评论