数据结构与算法
文章平均质量分 74
数据结构与算法
Hello,小高同学
Hello,小高同学,一名耐心的码农
展开
-
1002 写出这个数 ——思想总结
读入一个正整数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数n的值。这里保证n小于10100。输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789输出样例:...原创 2019-08-13 20:50:20 · 126 阅读 · 0 评论 -
1003 我要通过!深入解读
1003我要通过!(20分)“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:字符串中必须仅有P、A、T这三种字符,不可以包含其它字符; 任意形如xPATx的字符串都可以获得“答案正确”,其中x或者是空字符串,或者是仅...原创 2019-08-14 11:49:42 · 353 阅读 · 1 评论 -
求素数的各种方法,例如筛数法求素数
首先,2是公认最小的质数,所以,先把所有2的倍数去掉;然后剩下的那些大于2的数里面,最小的是3,所以3也是质数;然后把所有3的倍数都去掉,剩下的那些大于3的数里面,最小的是5,所以5也是质数……#include <iostream>using namespace std;int prime(int n);int main() { prime(1000000); ...转载 2019-08-05 21:30:48 · 445 阅读 · 0 评论 -
1009 说反话 ——getline的使用,附上读取字符串cin、get、getline等函数的使用
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。输出格式:每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Her...原创 2019-08-07 23:24:42 · 327 阅读 · 0 评论 -
1026 程序运行时间 (15 分)
1026程序运行时间(15分)要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick,即“时钟打点”。同时还有一个常数 CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数f的运行时间,我们只要在调用f之前先...原创 2019-09-02 18:08:55 · 203 阅读 · 0 评论 -
面试题——二级指针
请问下列程序存在什么问题#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;#include <cstring>void GetMemory(char *p){ p = (char *)malloc(sizeof(100));}void main(){...原创 2019-06-06 10:14:18 · 714 阅读 · 0 评论 -
快速幂取模快速算法超级详细介绍
今天在网上看了一些快速幂取模算法的介绍,总体感觉要么文章介绍的很简略,导致我搞了半天才搞明白什么意思,还有的文章直接放上了错误的代码,真是坑爹啊!所以我就特意写一篇文章方便大家理解一下这个算法的原理和代码是什么意思。原理介绍:目标:快速求出ab Mod c(注意:b是一个大数)数学原理工具: (a*b) Mod c = [(a Mod c)*(b ...转载 2019-04-13 17:09:05 · 3056 阅读 · 3 评论 -
数组中重复出现,次数最多的数及出现的次数
#include <stdio.h>#include <stdlib.h>#include <ctime>#include <iostream>using namespace std;#include <map>//空间换时间//万一有非正整数,这个方法就不能用了void search(int a[], int len)...原创 2019-06-04 00:26:55 · 3017 阅读 · 0 评论 -
数据结构中的逻辑结构以及物理结构
1.逻辑结构:所谓逻辑结构就是数据与数据之间的关联关系,准确的说是数据元素之间的关联关系。注:所有的数据都是由数据元素构成,数据元素是数据的基本构成单位。而数据元素由多个数据项构成。逻辑结构有四种基本类型:集合结构、线性结构、树状结构和网络结构。也可以统一的分为线性结构和非线性结构。2.物理结构:数据的物理结构就是数据存储在磁盘中的方式。官方语言为:数据结构在计算机中的表示(又...转载 2019-06-04 09:10:44 · 23203 阅读 · 0 评论 -
程序 = 数据结构+算法 的理解(数据结构、算法、抽象数据类型)
数据结构:相互之间存在关系的数据元素的集合,描述的是数据与数据之间的结构关系,数据元素之间的存在的关系会产生不同的结构,例如(数组、队列、树、图等结构),这个结构其实也就是相互之间存在关系数据元素的集合,因此也就是数据结构算法:解决问题的步骤一、总结:1、程序 = 数据结构 + 算法 。数据是程序的中心。数据结构和算法两个概念间的逻辑关系贯穿了整个程序世界,首先二者表现为不可分割的关系...原创 2019-06-04 10:47:21 · 22046 阅读 · 0 评论 -
快速幂和快速幂求模算法
一、快速幂求 x 的 n 次方当然,这道题你也可以采用 n 次循环让 n 个 x 相乘,不过,这样的做法毫无意义,因为估计小学生也会做。不过这道题如果知道了思路,还是挺简单,我举个例子吧,例如我们要求 2^8。1、首先,我们可以通过 2 * 2 = 4 得到 2^22、接着,我们利用刚才的结果,让 4 * 4 = 16 得出 2^43、接着,同样的道理,让 16 * 16 =...原创 2019-06-11 22:08:44 · 3243 阅读 · 0 评论 -
算法题中关于去重问题的解法(不同的值)
算法题中关于去重问题的解法(不同的值):这类问题最好利用C++的map或set来做。1087有多少不同的值(20分)当自然数n依次取 1、2、3、……、N时,算式⌊n/2⌋+⌊n/3⌋+⌊n/5⌋有多少个不同的值?(注:⌊x⌋为取整函数,表示不超过x的最大自然数,即x的整数部分。)输入格式:输入给出一个正整数N(2≤N≤104)。输出格式:...原创 2019-08-13 16:01:12 · 411 阅读 · 0 评论 -
二叉链表、三叉链表、双亲链表(数组表示)、先序遍历、中序遍历、后续遍历
#include <iostream>using namespace std;//二叉链表struct BinNode{ int data; struct BinNode * lchild, *rchild;};typedef struct BinNode BinNode;typedef struct BinNode * BinTree;//三叉链表 ...原创 2019-09-05 15:49:55 · 4622 阅读 · 0 评论 -
求二叉树叶子结点及其个数
先序遍历、中序遍历、后序遍历,其实本质都是一样的 图片来源于传智播客课程//求叶子节点个数,先序int sum = 0;void Ynumber(BinNode * root){ if (root) { if ((root->lchild == NULL) &&...原创 2019-09-05 17:49:42 · 8578 阅读 · 0 评论 -
copy树
//copy树BinNode * copy(BinNode * root) //传头结点来,返回头结点,头结点就代表树{ BinNode * NewRoot = NULL; //新头结点 BinNode * Newlp = NULL; //新左节点 BinNode * Newrp = NULL; //新右节点 if (root == NULL) ...原创 2019-09-05 20:29:31 · 230 阅读 · 0 评论 -
求树的高度
//求树的高度int Depth(BinNode * root){ int Depleft = 0, Depright = 0, Depvar = 0; if (root == NULL) return 0; Depleft = Depth(root->lchild); Depright = Depth(root->rchild);...原创 2019-09-06 15:10:43 · 482 阅读 · 0 评论 -
中序遍历的非递归实现
图来源于传智播客课程经典案例 图来源于传智播客课程理解好这个案例,就理解了中序遍历的非递归实现代码实现非递归中序遍历#include <iostream>using namespace std;#include <stack>//二叉链表...原创 2019-09-06 17:59:24 · 2376 阅读 · 0 评论 -
二叉树的前序遍历、中序遍历和后序遍历之间还原二叉树
还原树有三种情况:中序遍历+先序遍历中序遍历+后续遍历#方法1.中序遍历+先序遍历算法:1.通过先序遍历找到根节点A,再通过根节点A在中序遍历的位置找出左子树和右子树2.在A的左子树中,找左子树的根节点(在先序中找),转步骤13.在A的右子树中,找右子树的根节点(在先序中找),转步骤1例题:先序:ADEBCF中序:DEACFB2.中序遍历+后续...原创 2019-09-10 10:58:39 · 302 阅读 · 1 评论 -
#方法创建二叉树
以下给出先序遍历的结果来创建二叉树,#方法可以唯一创建一颗二叉树,因为规定叶子节点后面必须要#来标识结束,所以,不管左子树和右子树如果没有,就肯定会有#,下面的例子可知,1是根,2是1的左子树,4是2的左子树,4为叶子节点,2的右子树为空,到此处就知道2这棵树结束,3为1的右子树,3为叶子节点。所以可以唯一确定这棵树。这种方法还是可以用在简单开发里面的。(此图来源于传智播客课程)#defi...原创 2019-09-10 19:26:30 · 1318 阅读 · 0 评论 -
释放树
void FreeTree(BinNode * root){ if (root == NULL) return; if (root->lchild != NULL) { FreeTree(root->lchild); root->lchild = NULL; } if (root->r...原创 2019-09-10 20:08:09 · 281 阅读 · 0 评论 -
八大排序的稳定性,时间复杂度和空间复杂度总结
八大排序的稳定性,时间复杂度和空间复杂度总结:二分插入排序 :平均时间复杂度为O(n^2),空间复杂度始终为1,稳定排序。二分插入排序的空间复杂度和直接插入排序一样,折半插入排序减少了元素之间的比较次数,但是元素的移动次数不变,所以时间复杂度仍为O(n²)。...转载 2019-09-14 23:48:10 · 1895 阅读 · 0 评论 -
希尔排序
一、原理希尔排序是对直接插入排序的改进,建立在直接排序的基础上实现的。因为直接插入排序适合那些数据本身就是基本有序的或者数据量比较小的情况。但是,实际中数据量小或数据基本有序属于特殊情况,这就是直接插入排序的局限性。希尔排序的基本思想就是当有大量的数据需要排序时,可以将大量的数据分组成若干子序列,此时每个子序列的数据比较少,可以对每个子序列使用直接插入排序。当整个序列基本有序时(基本有序:小的...原创 2019-09-15 11:11:43 · 184 阅读 · 0 评论 -
背包问题(贪心方法原理)
掌握按贪心方法原理求背包问题最优解的方法一、问题描述 背包问题描述如下: 已知 背包容量M=120 物品种类数n=10 各种物品的总效益pi(i=1,2,………10) :50,60,70,80,90,80,70,60,50,40 各种物品的总重量wi(i=1,2………10) :17,30,25,41,80,70,64,56,47,38求: 各种物品所取重量占其总重量的...原创 2018-07-12 21:52:31 · 2405 阅读 · 0 评论 -
位运算的五个实例
一、交换不允许你使用额外的辅助变量来完成交换我们知道,两个相同的数异或之后结果会等于 0,即 n ^ n = 0。并且任何数与 0 异或等于它本身,即 n ^ 0 = n。所以,解释如下:把(1)中的 x 带入 (2)中的 x,有y = x^y = (x^y)^y = x^(y^y) = x^0 = x。 x 的值成功赋给了 y。对于(3),推导如下:x = x^y = (...原创 2019-06-12 15:57:09 · 1483 阅读 · 0 评论 -
冒泡排序和选择排序
//冒泡排序#include <iostream>using namespace std;int main(){ int nums[]={9,16,23,90,25}; int numslen = sizeof(nums)/sizeof(int); for(int i=0; i<numslen-1; i++) { ...原创 2019-03-14 13:53:48 · 143 阅读 · 0 评论 -
随机函数
#include <cstdlib> //含有rand(),st=srand()#include <ctime>#include <iostream>using namespace std;#define random(x) (rand()%x)int main(){ srand((int)time(NULL)); ...原创 2019-03-14 11:21:09 · 656 阅读 · 0 评论 -
八大排序,最简单的代码,最适合基础性学习。快速排序,冒泡排序,直接插入排序,二分法插入排序,直接选择排序,归并排序(分治法)
以下代码亲测,代码完全正确。一、快速排序:#include<stdio.h>#define N 10void quick(int m[],int ,int );int main(){ int i; int m[N]={10,4,78,54,23,1,41,54,66,10}; quick(m,0,N-1); for(i=0;i<N;...原创 2018-07-09 20:37:49 · 405 阅读 · 0 评论 -
跳一跳
问题描述 近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳跃则此次得分为2分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将+2,+4,+6,+8...)。...原创 2018-09-19 10:22:17 · 175 阅读 · 0 评论 -
机器人测试 ACM
DescriptionA robot has been programmed to follow the instructions in its path. Instructions for the next direction the robot is to move are laid down in a grid. The possible instructions are N north (...原创 2018-07-13 12:10:38 · 6227 阅读 · 0 评论 -
最长公共子序列问题 (LCS问题)(动态规划)
例题:x={A,B,C,B,D,A,B} y={B,D,C,A,B,A}求x与y最长的公共子序列表达式: if(xm=xn) LCS(m,n)=LCS(m-1,n) else max( LCS(m-1,n),LCS(m,n-1) )代码:#include<stdio.h>#include<stdlib.h>#inc...原创 2018-07-12 22:23:16 · 883 阅读 · 0 评论 -
八皇后问题(回溯法)
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 92种#include<stdio.h>#include<stdlib.h> #include<math.h>#define ...原创 2018-07-12 21:56:15 · 311 阅读 · 0 评论 -
汉诺塔问题(递归算法) c语言 python语言
一、问题来源相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。汉诺塔问题图示[2]分析:...原创 2018-07-12 21:48:57 · 1145 阅读 · 0 评论 -
求任两结点间的最短距离 Floyd算法 (动态规划)
一、 动态规划原理解决计算图的任两结点间的距离的Floyd算法 二、:问题描述 设图G 的结点个数n=10,给定一个10*10矩阵作为图G 的成本矩阵. 其中的元素99相当于无穷,表示相应的两个结点间没有边相连 0 99 8 7 6 5 4 3 2 1 99 0 99 8 7 6 ...原创 2018-07-12 21:38:17 · 1491 阅读 · 0 评论 -
埃及分数问题(贪心算法)
一、问题描述把一个真分数表示成最少的埃及分数之和。埃及分数即分子为1的分数。例如 7/8=1/2+1/3+1/24;1.判断这个分数是不是埃及分数2.形成1/2 1/3 1/4 ........1/n3.fn=fn+1-1/n4.fn==0 ?代码//埃及分数问题#include<stdio.h>#include<stdlib.h...原创 2018-07-12 21:34:14 · 10827 阅读 · 0 评论 -
流水线调度问题(动态规划)
问题描述 已知 作业个数n=10 各个作业第一道工序所须时间ai(I=1,2……,n) 各个作业第二道工序所须时间bi(I=1,2……,n)作业序号: 1 2 3 4 5 6 7 8 9 10 a; 25 30 35 40 45 50 55 60 65 70 b; ...原创 2018-07-12 21:23:33 · 10926 阅读 · 0 评论 -
整数划分问题(递归原理)
例如但n=4时,他有5个划分,{4},{3,1},{2,2},{2,1,1},{1,1,1,1};注意4=1+3 和 4=3+1被认为是同一个划分。该问题是求出n的所有划分个数,即f(n, n)。下面我们考虑求f(n,m)的方法;m为n划分的子数中最大的整数;递归法: 根据n和m的关系,考虑以下几种情况: (1)当n=1时,不论m的值为多少(m>0),只有一种划分即{1}; (2...原创 2018-07-12 21:16:22 · 3194 阅读 · 0 评论 -
折半查找(二分法查找)
二分法检索又称折半检索,是一种效率较高的检索方法,使用这种方法检索时,要求字典的元素在顺序表中按关键字排序(一定是已经排好序的,否则检索有问题)二分查找,代码亲测。#include<stdio.h>#define N 10void insearch(int m[],int );int main(){ int m[N]={5,10,18,25,27,32,41,51...原创 2018-07-12 20:59:30 · 604 阅读 · 0 评论 -
Fibonacci数列求模
问题描述Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式输入包含一个整数n。输出格式输出一行,包含一个整数,表示Fn除以10007的余数。说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再...原创 2018-12-27 17:05:46 · 395 阅读 · 0 评论 -
蓝桥杯 基础练习 字母图形
分析:所有的A横纵坐标之差的绝对值都为0,所有的B横纵坐标之差的绝对值都为1,其他字母都是与A横纵坐标之差的绝对值相差一个恒定的数。以此即可利用二重循环的i,j之差输出图形。源代码:代码:#include<stdio.h>#include<stdlib.h>int main(){ int n,m,i,j; scanf("%d %d",&a...原创 2018-12-28 11:43:48 · 372 阅读 · 0 评论 -
二分插入排序与二分检索算法
排序与检索请编写程序使用二分插入排序算法对随机数据进行降序排序,并对排序后的序列进行二分查找操作,要求:(1) 待排序的数据是计算机随机生成的 50 个随机数;(2) 实现二分插入排序算法,并输出排序后的结果;(3) 实现二分检索算法,成功返回 1,否则返回 0;(4) 统计二分检索算法比较的次数;源代码:...原创 2019-01-02 16:20:14 · 418 阅读 · 0 评论