经典算法集锦
各种经典算法题的编程实现。
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
@ZhangJun
Android开发领域拥有十余年经验的资深开发者,专注于Android系统层和应用层的开发,并在电视(TV/STB)和物联网(IoT)领域积累了丰富的行业经验。
展开
-
用C文件编写通讯录系统
【问题描述】1)通过键盘建立通讯录,每条记录至少包括2个数据项:姓名、电话号码;2)对通讯录进行插入、删除、修改和查找;3)通过姓名查找,必须实现精确查找和模糊查找,例如输入“张”,则显示第一个姓张的朋友,然后可以选择“下一个”,鼓励思路创新,提供其他多种查找方式,例如拼音查找等;4)也可以根据电话号码或部分电话号码进行精确查找和模糊查找;5)自行定义数据结构,可以选择性的将顺......原创 2016-02-01 23:37:47 · 4392 阅读 · 1 评论 -
便利店选址问题
【问题描述】某小区决定在小区内部建一家便利店,现小区内部共有八栋楼,它们的地理坐标分别为:(10,20)、(30,34)、(19,25)、(38,49.1)、(9,38.1)、(2,34)、(5,8)、(29,48)。同时,其中的住户人数分别为:30, 45, 28, 8, 36, 16, 78, 56。为了方便更多的住户购物,要求实现总体最优,请问便利店应该建立在哪里?【提示】1)便......原创 2016-01-27 20:48:12 · 5161 阅读 · 1 评论 -
数据结构之一元多项式相加
问题采用链式存储结构,将两个线性链表表示的一元多项式相加,并输出。算法设计1、程序结构设计1)数据结构typedef struct node{ floatcoef; //序数 intexpn; //指数 struct node *next; //指向下一个结点的指针}......原创 2016-03-06 23:04:22 · 29649 阅读 · 1 评论 -
冒泡排序原理及实现
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历待排序的列表,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历列表的工作是重复地进行直到没有再需要交换,也就是说该列表已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。外层循环控制排序的轮数,内层循环则负责在每一轮中比较并交换相邻的两个元素。如果前一个元素大于后一个元素,就交换它们的位置。这样,每一轮过后,最大的元素都会被“冒泡”到数组的最后。函数则用于打印排序后的数组。函数打印排序后的数组。原创 2022-07-06 19:45:56 · 1128 阅读 · 0 评论 -
二分法的原理和实现
对于求解单调函数的根或最值,二分法通过不断地缩小求解区间的范围来逼近满足精度要求的解。此外,二分法的收敛速度相对较慢,因此需要根据实际情况选择合适的精度要求和求解区间。需要注意的是,此代码假设数组是有序的,并且数组中的元素不重复。如果数组中的元素可能重复,或者需要查找的是最值而非特定元素,那么二分法的实现会有所不同。:在有序数组中查找目标元素时,二分法的基本思路是不断地将当前查找范围缩小为一半,直到找到目标元素或者确定目标元素不存在于数组中。以上代码实现了一个简单的二分法查找函数。原创 2022-07-05 20:11:07 · 433 阅读 · 0 评论 -
求1000以内素数平均值
素数的定义素数又称质数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。合数是由若干个质数相乘而得到的,所以,质数是合数的基础,没有质数就没有合数。算法原理按照定义,从2到n-1判断有没有能整除n的数。如果有,则不是素数,否则,是素数,这样算法复杂度是O(n...原创 2017-05-31 11:59:10 · 4637 阅读 · 1 评论 -
埃及分数和
埃及分数即分子为1的分数。埃及分数和即把一个真分数表示成最少的埃及分数之和。原创 2017-05-31 13:29:42 · 1768 阅读 · 1 评论 -
C语言打印正六边形
#include #includevoid print(int space, int num, int type){ while (space--) putchar(' '); if (type) { while (num--) putchar('*'); putchar('\n'); }原创 2017-05-31 13:42:08 · 6395 阅读 · 3 评论 -
C语言大小写转换
C语言大小写转换原创 2017-05-31 13:44:33 · 1534 阅读 · 3 评论 -
汉诺塔问题求解
#includevoid hannoi(int n,char one,char two,char three);//hannoi声明 void hanoi(int n,char one,char two,char three);//声明原创 2017-05-31 13:54:52 · 533 阅读 · 1 评论 -
猴子吃桃问题
我们可以观察到,每一天的桃子数量是前一天数量的一半再减一,这个过程可以表示为:第i天的桃子数量 = (第i+1天的桃子数量 + 1) * 2。如果我们知道第N天只剩下一个桃子,那么我们可以从第N天开始,依次向前计算每一天的桃子数量,直到计算到第一天。递归是一种解决问题的方法,它将问题分解为更小的子问题,然后使用这些子问题的解来构建原问题的解。猴子吃桃问题是一个经典的数学问题,通常描述为:猴子第一天摘了若干桃子,吃了一半又一个,第二天又吃了剩下的一半多一个,如此循环,等到第N天,发现只剩下一个桃子。原创 2017-06-01 10:37:01 · 538 阅读 · 1 评论 -
递归判断一个数是不是回文数
回文数就是原数与其倒置后的数相等,如:123321,到之后仍为123321,即为回文数。原创 2017-06-01 10:45:15 · 6420 阅读 · 5 评论 -
C语言求1000以内守形数
若正整数n是它的平方数的尾部,则称n为守形数,又称同构数。例如:6是其平方数36的尾部,76是其平方数5776的尾部,6和76都是守形数。原创 2017-06-01 13:54:30 · 11326 阅读 · 1 评论 -
C语言swap函数
#includevoid swap(int *pa,int *pb){ int temp; temp=*pa,*pa=*pb,*pb=temp;}void main(){ int a=10,b=20; swap(&a,&b);//传递的是实参变量a,b的地址 printf("a=%d,b=%d\n",a,b);}原创 2017-05-31 13:23:32 · 5033 阅读 · 0 评论 -
字符串反转实现
#include#includevoid reverse(char s[]){ int i,j,t; for(i=0,j=strlen(s)-1;i原创 2017-05-31 13:16:32 · 466 阅读 · 1 评论 -
C语言使用递归求N的阶乘
递归求N的阶乘是一种非常直观的方法。阶乘的定义是n的阶乘(n!)是所有小于及等于n的正整数的积,并且0的阶乘为1。原创 2017-05-31 13:13:18 · 3241 阅读 · 1 评论 -
C++求圆面积和周长
重温一下小学知识,求圆面积和周长c=πd=2πr 圆的周长=直径×圆周率s=πrr 圆的面积=半径×半径×圆周率C++代码实现#includeusing namespace std;const float PI=3.141593;class Circle {private : float radius;public: Circle(float r);...原创 2017-05-31 12:07:11 · 32573 阅读 · 5 评论 -
统计字符串中某子字符串出现次数
定义头文件count.h#include#include#include #define M 100;#define N 10;int fun(char*str,char*substr);原创 2017-05-31 11:35:24 · 1775 阅读 · 0 评论 -
堆排序算法
堆排序(Heapsort)是一种基于堆数据结构的排序算法,它是选择排序的一种。堆排序利用堆这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆排序算法的时间复杂度为O(nlogn),具有稳定性和空间复杂度的优势。原创 2016-10-26 20:00:31 · 9279 阅读 · 2 评论 -
数据结构之链表归并排序
问题设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增排序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏。源程序#include <stdio.h>#include<stdlib.h>#de......原创 2016-03-06 22:38:19 · 1091 阅读 · 1 评论 -
C语言中的++a和a++的区别
C语言中的++a和a++的区别原创 2017-03-20 17:01:41 · 17325 阅读 · 3 评论 -
C语言之左移和右移运算符
左移运算符()右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而...原创 2017-03-20 14:32:48 · 4091 阅读 · 1 评论 -
C语言求1000以内水仙花数
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。...原创 2017-06-01 14:11:29 · 11554 阅读 · 4 评论 -
C语言求1000以内完数
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6=1+2+3.编程找出1000以内的所有完数。原创 2017-06-01 14:15:23 · 23983 阅读 · 5 评论 -
动态规划求最大子段和
动态规划(Dynamic Programming, DP)是一种在数学、计算机科学和经济学中使用的方法,用于解决包含重叠子问题和最优子结构特性的问题。最大子段和问题(也称为最大子数组和或Kadane算法)是一个经典的DP问题。最大子段和问题的目标是找到一个数组中的连续子数组,使得该子数组的元素之和最大。原创 2017-05-31 13:47:58 · 773 阅读 · 1 评论 -
分治法求最大子段和
最大子段和问题是指在一个给定的整数序列中,找到一个连续的子序列,使得这个子序列的和最大。例如,给定序列 [-2, 11, -4, 13, -5, -2],最大子段和是 20,对应的子序列是 [11, -4, 13]。使用分治法求解最大子段和问题,可以将原问题划分为两个子问题:求左半部分的最大子段和和求右半部分的最大子段和。然后,将这两个子问题的解与跨越左右两部分的最大子段和进行比较,取三者中的最大值作为原问题的解。分治法是一种求解问题的策略,它通过将一个大问题分解成几个相对较小的子问题来解决。原创 2017-05-31 13:49:45 · 1956 阅读 · 0 评论 -
高精度数据问题
一个有趣的高精度数据:构造一个尽可能大的数,使其从高到低前一位能被1整除,前2位能被2整除,……,前n位能被n整除。原创 2017-05-31 13:52:43 · 1389 阅读 · 0 评论 -
回溯法求马的遍历问题
需要注意的是,由于马在棋盘上只能走“日”字形,因此有些格子可能无法从某些位置到达。例如,如果我们发现某个位置无法到达某个特定的格子,我们就可以提前结束对该位置的搜索。在5x4的棋盘上,我们需要找到一种方法,使得马从起始位置出发,遍历棋盘上的每一个格子,并且每个格子只被遍历一次。回溯法是一种求解约束满足问题的有效方法,它通过搜索所有可能的解空间来找到所有满足约束条件的解。在马的遍历问题中,我们可以使用回溯法来找到马在棋盘上遍历所有格子的所有路径。原创 2017-06-01 10:38:47 · 3978 阅读 · 2 评论 -
竞赛名次问题--信息数字化
三位老师对某次数学竞赛进行了预测。他们的预测如下:甲说:学生A得第一名,学生B得第三名。 乙说:学生C得第一名,学生D得第四名。丙说:学生D得第二名,学生A得第三名。竞赛结果表明,他们都说对了一半,说错了一半,并且无并列名次,试编程输出A、B、C、D各自的名次。...原创 2017-06-01 10:50:06 · 1086 阅读 · 1 评论 -
开灯问题算法
描述有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k≤n≤1000输入输入一组数据:n和k输出输出开着的灯编号样例输入7 3样例输出1 5 6 7//乒乓开关 a[i]=1-a[i]...原创 2017-06-01 11:02:58 · 920 阅读 · 1 评论 -
动态规划解决数字塔-数字三角形问题
给定一个由N行数字组成的数字三角形,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大,以及路径。原创 2017-06-01 14:04:27 · 1321 阅读 · 0 评论 -
逻辑和判断谁是小偷
题目: 警察局抓了a,b,c,d四名偷窃嫌疑犯,当中只有一个是小偷,审问结果如下: a说:“我不是小偷。” b说:“c是小偷。” c说:“小偷肯定是d。” d说:“c在冤枉人。” 现在已经知道4个人中3人说的是真话,一个说的是假话,那么谁是小偷?...原创 2017-06-01 14:18:51 · 6004 阅读 · 5 评论 -
迭代法求平方根
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法,即一次性解决问题。迭代法又分为精确迭代和近似迭代,“二分法”和“牛顿迭代法”属于近似迭代法。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。求一个数的平方根,已经有...原创 2017-06-01 14:24:15 · 1863 阅读 · 1 评论 -
城市最短路径问题--图的广度优先搜索
城市最短路径问题--图的广度优先搜索原创 2017-05-31 13:39:29 · 1935 阅读 · 1 评论 -
C语言求a+aa+aaa+...
要求a+aa+aaa+…原创 2017-05-31 13:19:39 · 8365 阅读 · 1 评论 -
穷举法求最大公约数和最小公倍数
穷举法(也叫枚举法),穷举法求两个正整数的最大公约数的解题步骤:从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数 。①定义1:对两个正整数a,b如果能在区间[a,0]或[b,0]内能找到一个整数temp能同时被a和b所整除,则temp即为最大公约数。int divisor (int a,int b) { int temp;...原创 2017-05-31 13:00:00 · 13205 阅读 · 2 评论 -
1000个数范围[0,999],有2个相同的数,求这个数
import java.util.Arrays;public class SearchDemo {/** *被搜索数据的大小 */private static final int size = 1000;public static void main(String[] args) {int[] data = new int[size]; // 添加测试数据for (int k原创 2016-10-11 17:54:02 · 5525 阅读 · 2 评论 -
约瑟夫环问题
有N个人围成一圈,第一个人从1开始报数,报到M的人出列,求最后一个出列的人。先将这个题目转换成数学问题:设有n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数 (用数学方法解的时候需要注意应当从0开始编号,因为取余会取到0解。)实质是一个递推,n个人中最终留下来的序号与n-1个人中留下来的人的序号有一个递推关系式。...原创 2016-10-10 22:37:12 · 1088 阅读 · 1 评论 -
求数字N以内最大质数
求数字N以内最大质数原创 2016-10-10 22:34:34 · 4094 阅读 · 1 评论 -
输入一个字符串,输出该字符串中字符的所有组合
分析假设给定一字符串“abc”,则其所有组合方式为: a, b, ab, c, ac, bc, abc共七种(2^n - 1)种组合方式,可以利用位操作来简化题目,即给所有输出方式进行编号(1 ~ 2^n-1),对于本题目来说即:0 0 1 --> a0 1 0 --> b0 1 1 --> ab1 0 0 --> c1 0 1 --> ac1 1 0 --> bc...原创 2016-10-11 19:05:32 · 4601 阅读 · 1 评论