自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (3)
  • 收藏
  • 关注

原创 算法笔记:哈希表的入门使用(C/C++)

问题描述:给出N个正整数,再给出M个正整数,问这M个数中的每个数分别是否在N个数中出现过。N、M <= 10^5;eg:N=5,M=3,N个正整数为{8,3,7,2,6},欲查询的M个正整数为{7,2,4},于是后者中只有7和2在N个正整数中出现过。问题解答:常规思路是:对每个要查询的正整数x,遍历所有N个数,看是否有一个数与 x 相等。这种做法的时间复杂度是O(NM),当N和M都很大时,时间复杂度便会无法承受。改进思路:可以用空间换时间,即设定一个 bool 型数组 HashTable[1

2020-06-29 23:08:59 242

原创 算法笔记:PAT Ranking(C/C++)

题目描述:有n个考场,每个考场有若干数量的考生。现在给出各个考场中考生的准考证号与分数,要求将所有考生按分数从高到低排序,并按顺序输出所有考生的准考证号、排名、考场号及考场内排名。Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in

2020-06-22 10:51:12 158

原创 C++标准模板库(STL)之sort函数

C语言中,有很多东西需要读者自己去实现,如果不好实现的话还会容易出错。为了简化这些,C++为使用者提供了标准模板库(Standard Template Library,STL),其中封装了很多相当实用的容器。(容器可以暂时理解为能实现很多功能的东西。)今天来看一下STL中的sort函数:基本介绍:sort函数是用来排序的函数,它可以根据情形使用不同的排序方法,效率较高。sort函数在实现时规避了经典快速排序中可能出现的会导致实际复杂度退化到O(n^2)的极端情况。1、sort的使用sort函数的使

2020-06-17 21:31:52 808

原创 插入排序又来啦(C/C++版)

直接上代码啦:这个插入排序还是要理清思路,要不然还挺容易弄迷糊的。在写的时候最好向代码中那样命名。当前需要出入的元素命名为 current,该元素前一个的下标命名为 perIndex=i-1;插入排序可以分为两层遍历:第一层遍历,从第一个元素到最后一个元素,把它插入到合适的位置。第二层遍历,针对要插入的第 i 个元素,从 i-1开始倒序,如果arr[perIndex]大于 current,则arr[perIndex+1]=arr[perIndex],即元素后移,给要出入的元素腾出位置。#include

2020-06-17 20:43:55 72

原创 从选择排序看C++和Python的不同

#include<cstdio>#include<cstring>//首先是定义函数的不同,Python是用def开头+函数名+参数void SelectSort(int arr[]) //C++数组传入是 arr[],而不是 arr=[] 也不是 arr=[20]之类的,在C++里如果传入的数组需要填写长度,应该为 arr[20]{ for(int i=0;i<8;i++) { int minIndex=i; // 所有变量在使用前都要声明 数据类型

2020-06-17 16:43:16 125

原创 选择排序又来啦(C/C++版)

选择排序是最简单的排序方法,时间复杂度是O(n^2).这里就不再介绍选择排序啦,直接上代码啦:#include<cstdio>#include<cstring>void SelectSort(int arr[]) { for(int i=0;i<8;i++) { int minIndex=i; for(int j=i+1;j<8;j++) { if(arr[minIndex]>arr[j]) { minIndex=j;

2020-06-17 16:29:48 74

原创 算法笔记:说反话(C/C++和Python)

题目描述:给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。**输出格式:**每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Here I Come输出样例:Come I Here World HelloC/C++代码:在开始之前,再复习一

2020-06-17 15:54:43 187

原创 算法笔记:回文数(C/C++和Python)

题目描述读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。C/C++代码:#include<cstdio>#include<cstring>const int MAXN=256;bool judge(char str[]){ int len=strlen(str); for(int i=0;i<len/2;i++) { if(str[i]!=str[len-1-i]) r

2020-06-17 11:49:05 212

原创 算法笔记:又一版 A+B(Python和C/C++)

题目描述输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。输入输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。当m为0时输入结束。输出输出格式:每个测试用例的输出占一行,输出A+B的m进制数。C++代码:#include<cstdio>int main(){ long long A,B,sum; int m; while(scanf("%d",&m)!=

2020-06-17 11:20:07 273

原创 C/C++进制转换(不可不看)

对于一个P进制的数,如果要转化为Q进制,需要分两步:1、将P进制数x转换为十进制数y。2、将十进制数y转化为Q进制数z 。代码实现:1、将P进制数x转换为十进制数yint y=0,product=1;while(x!=0){ y = y+(x%10)*product; x=x/10; product=product*p;}2、将十进制数y转化为Q进制数zint z[40],num=0;do{ z[num++]=y%Q; y=y/Q;}while(y!=0);这里注意

2020-06-17 10:22:59 204

原创 算法笔记:查找学生信息(C/C++)

题目描述输入N个学生的信息,然后进行查询。输入输入的第一行为N,即学生的个数(N<=1000)接下来的N行包括N个学生的信息,信息格式如下:01 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 19然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:02030104输出输出M行,每行包括一个对应于查询的学生的信息。如果没有对应的学生信息,则输出“No Answer!”C++代码:(跑分只有50!好

2020-06-16 22:37:45 1593 1

原创 算法笔记: A+B和C(C/C++和Python)

题目描述给定区间[-231, 231]内的3个整数A、B和C,请判断A+B是否大于C。输入输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。输出对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。注意:做这个题主要是int型范围的把控,int是占用4个字节,共32位,存储范围是-2147483648~2147

2020-06-16 18:21:18 500

原创 算法笔记:比较奇偶数个数(C/C++和Python)

题目描述第一行输入一个数,为n,第二行输入n个数,这n个数中,如果偶数比奇数多,输出NO,否则输出YES。输入输入有多组数据。每组输入n,然后输入n个整数(1<=n<=1000)。输出如果偶数比奇数多,输出NO,否则输出YES。C/C++代码:#include<cstdio>#include<iostream>#include<cstring>using namespace std;int main(){ char a[15],b

2020-06-16 17:03:30 331

原创 算法笔记:特殊乘法(C/C++和Python)

题目描述写个算法,对2个小于1000000000的输入,求结果。特殊乘法举例:123 * 45 = 14 +15 +24 +25 +34+35输入两个小于1000000000的数输出输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。说明:对于这种类型的题,输入的数据位数很多,数据很大时,可以把数据按照字符串输入,之后按照字符串的操作进行,当需要计算时,再把字符串转化为整型。C/C++代码:#include<cstdio>#in

2020-06-16 11:36:57 209

原创 算法笔记:A+B(C/C++和Python)

问题描述:给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。现在请计算A+B的结果,并以正常形式输出。C/C++代码:#include<cstdio>#include<iostream>#include<cstring>using namespace std;int main(){ char a[15],b[15]; while(scanf("%s %s",a,b)!=EOF) { int flaga=1,flagb

2020-06-15 21:04:42 364

原创 算法笔记:剩下的树(C/C++和 Python)

题目描述有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,…,L共L+1个位置上有L+1棵树。现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。输入两个整数L(1<=L<=10000)和M(1<=

2020-06-15 16:48:18 259

原创 算法笔记:挖掘机技术哪家强(C/C++和Python)

为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。输入格式:输入在第 1 行给出不超过10^5​​ 的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。C/C++代码:#include<cstdio>const int maxn=100010;int school[maxn]={0};int main()

2020-06-15 15:37:28 203

原创 算法笔记:3n+1猜想(C/C++和Python)

题目描述:对于任何一个自然数n(n<1000),偶数就砍一半,奇数就3n+1再砍。按这样的规则看下去,求最终得到1所需的步数(砍了多少次?)C++代码#include<cstdio>#include<cstring>int main(){ int n,step=0; scanf("%d",&n); while(n!=1) { if(n%2==0) { n=n/2; step++; } else { n=3*n+1

2020-06-15 12:06:17 273

原创 黑盒测试及其中的单点测试和多点测试

黑盒测试是指:系统后台会准备若干组输入数据,然后让提交的程序去运行这些数据,如果输出的结果与正确答案完全相同,那么就称通过了这道题的黑盒测试,否则会根据这道题的错误类型而返回不同的结果。其中,根据黑盒测试是否对每组测试数据都单独测试或是一次性测试所有数据,又可以分为单点测试和多点测试。单点测试:对于单点测试来说,系统会判断每组数据的输出结果是否正确。如果输出结果正确,那么对该组数据来说就通过了测试,并获得了这组数据的分值。在这种情况下,题目的总得分等于通过的数据的分值之和。从代码上来说,单点测试

2020-06-15 11:51:56 2195

原创 结构体及结构体初始化方法:构造函数

构造函数是用来初始化结构体的一种函数,它直接定义在结构体中。它不需要写返回值类型,而且函数名和结构体名相同。我们在定义结构体时,系统会自动生成一个构造函数,但是这个构造函数不需要传入任何参数。我们可以自己手动定义构造函数。而且在一个结构体中,可以有多个构造函数,在调用时,根据参数判断需要调用哪个构造函数。关于结构体的一些小知识:结构体里面可以定义除了自己本身之外的任何数据类型。不过虽然不能定义自己本身,但是可以定义指向自身类型的指针变量。...

2020-06-15 11:01:57 590

原创 C/C++指针、引用相关小知识

变量的地址:变量的地址一般指它占用的字节中第一个字节的地址。也就是说,一个int型的变量的地址就是它占用的 4Byte当中第一个字节的地址。在一个变量前面加上&,就表示变量的地址。指针实际上是表示内存地址的一个整数,它是一个unsigned类型的整数。在C语言中,数组名也可以作为数组的首地址使用。使用指针变量作为函数参数:指针类型也可以作为函数参数对的类型,这时视为把变量的地址传入函数。如果在函数中对这个地址中的元素进行改变,原先的数据就会确实的被改变。注:在进行函数书写..

2020-06-15 10:38:52 96

原创 C/C++中,数组作为函数参数传入

函数的参数可以是数组,且数组作为参数传入时,参数中数组的第一维不需要填写长度,如果是二维,那么第二维需要填写长度,在实际调用时也只需填写数组名。最重要的是,数组作为参数时,在函数中对数组元素的修改就等同于对原数组元素的修改。需要注意的是,虽然数组可以作为参数...

2020-06-15 09:53:02 1476

原创 经典解电报的题目来啦(C/C++和Python)

题目描述:有一行电文,已按如下规律译成密码:A–>Z a–>zB–>Y b–>yC–>X c–>x… …即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。做这个题主要是转化的方法:当是小写字母时,转化前后的字母ASCII 码相加总是为219;当是大写字母时,转化前后的ASCII码相加总是155.C++程序如下:#include&

2020-06-14 22:20:36 950

原创 C/C++解决杨辉三角形

直接上代码喽~#include<cstdio>int main(){ int a[100][100]; int n; scanf("%d",&n); for(int i=0;i<n;i++) { for(int j=0;j<i+1;j++) { if(j==0||j==i) # 该第一或者最后一个元素为1 { a[i][j]=1; } else { a[i][j]=a[i-1][j-1]+a[i-1][j

2020-06-14 21:21:24 314

原创 杨辉三角形(超级简单的Python实现方法)

杨辉三角形大家都知道,那么在这里就不再介绍了,大家肯定都用C/C++实现过杨辉三角形,是把数据存放在了一个二维数组里,那么如何让用Python来实现杨辉三角形呢?我查看了网上的很多方法,都很麻烦,有的还用到了生成器,那我们来看看简单的方法吧!其实,在Python中,二维数组就可以用列表的列表来表示。在这里,我们就把数据存放在列表的列表中。在杨辉三角形中,有一个很大的规律:就是每一行的第一个和最后一个都是1,那中间的数据是怎么生成的呢?中间的数据其实就是一个公式:(假设n表示行,m表示列)list

2020-06-14 20:59:39 25957 3

原创 C/C++字符数组(注意事项)

C/C++中,字符数组的输入有很多种,但是每种情况都是不一样的,一定要把字符数组的每种输入输出的情况弄清楚,这样才能在不同的情况下使用不同的方法。1、字符数组的初始化方法一、如果要初始化的字符串种还有空格,应该把空格也当作一个字符输入,注意,字符是使用单引号。char str[15]={'G', 'o', 'o', 'd', ' ', 's', 't', 'o', 'r', 'y', '!'};方法二、直接使用字符串初始化,但是仅限于在初始化时使用,程序其他位置不允许这样直接赋值整个字符串。

2020-06-14 16:40:31 986

原创 冒泡排序又来啦(C/C++版本)

这次就不介绍了,直接上代码喽:#include<cstdio>int main(){ int a[10]={0,3,1,6,8,2,4,9,5,7}; for(int i=1;i<10;i++){ for(int j=0;j<10-i;j++){ if(a[j]>a[j+1]){ int temp; temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for(int i=0;i

2020-06-14 12:03:11 98

原创 C++数组知识注意点

一位数组:在定义时最好初始化,初始化方式如下:假设把数组全部初始化为0,则有如下方式:1、a[10]={} ;2、a[10]={0};3、使用memset函数二维数组使用注意事项:在使用数组时,一定要注意,如果数组大小较大(大概10^6级别),则需要将数组定义在主函数外面,否则会使程序异常退出。原因使函数内部申请的局部变量来自系统栈,允许申请的空间较小;而函数外部申请的全局变量来自静态存储区,允许申请的空间较大。memset函数:对数组中每一个元素赋相同的值mems..

2020-06-14 11:39:04 228

原创 Python刷题输入输出

a=123b=456sum=a+bprint('sum=%d'%(sum))

2020-06-11 09:44:46 495

原创 Python怎么从键盘接收由空格分隔的两个数

我们知道python非常简单好用,但是我觉得python的输入输出格式是一个很麻烦的东西。比如说我们在进行刷题时,经常会遇到从键盘输入由空格分隔的某些数,这样的话,对python来说就不太好解决。那么如何从键盘输入由空格分隔的两个数呢?请继续往下看:a,b=map(int,input().split())sum=a+bprint(sum)我们利用input()函数接收键盘输入的数字,这个时候是 str 类型的,针对这个字符串利用 split()函数进行划分, split() 通过指定分隔符对字符

2020-06-11 09:37:53 3515

原创 又差点忘了更新了!!!!

最近在看数据库了,数据库感觉还是挺简单的,因为之前做过数据库的一些项目,所以整体看上去还行,不是太费劲,但是感觉还是要对比着面经看,要不然很容易看偏。这两天自己状态不太好,看书时也总是容易困,效率不太好,所以等过了这几天,我准备出一个数据库的一般知识点。另外,自己准备把之前学的C/C++拾起来啦,因为感觉只会一种语音好像不太行,还是要好好看看C/C++的,最起码,要能够用C/C++编代码。我准备结合着Python,好好练题啦!给我加油吧!希望自己能够找到一个好的工作。最后吧,希望自己身边都是

2020-06-10 20:12:44 89

原创 五大常用算法之五:分支限界法(最详细全面的讲解)

分支限界法一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 (1)分支搜索算法 所谓“分支”就是采用广度优先的策略,依次搜索E-结点的所有分支,也就是所有相邻结点,抛弃不满足约束条件的结点,其余结点加入活结点表。然后...

2020-06-08 17:58:59 16745 1

原创 五大常用算法之四:回溯法(最详细全面的讲解)

1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。2、基本思想在包含问题的所有解的解空间...

2020-06-08 17:57:30 2728

原创 最长公共子串与最长公共子序列的区别

子串:指的是从原串中取出连续几个字符的组成的串。eg:原字符串为:sdfghet--------->子串为:dfgh子序列:是指一个序列中,由若个数(字母)组成,然后从中任意删掉几个数(字母),保留剩下的数(字母)构成了一个序列,即称子序列。(或者从一个序列中,任意选取若干数或字符,按照这些数或字符原来的排序组成新的序列,即称子序列)。eg:sdfghet---------->子序列为:dght(即:字符不必是连续的)。...

2020-06-08 17:10:17 286

原创 五大常用算法之三:贪心算法(最详细全面的讲解)

贪心算法一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。二、贪心算法的基本思路:...

2020-06-08 16:56:27 4523

原创 NP问题以及一些相关知识

之前介绍过BFS,BFS可以用来找出所用段数最少的路径。但是,如果路径有权值,想要找出最快路径,据需要用到迪杰斯特拉算法,该算法找出的是总权重最小的路径。即:如果要计算非加权图的最短路径,可以使用广度优先遍历;要计算加权图的最短路径,可以使用迪杰斯特拉算法。但是,有一点需要注意,迪杰斯特拉算法只适用于正权重的有向无环图。如果有负权边,可以使用贝尔曼-福德算法。贪心算法:每步都选择局部最优解,最终得到的就是全局最优解的方法就是贪心算法。NP问题:如旅行商问题和集合覆盖问题。NP问题的求解.

2020-06-08 15:44:53 1096

原创 BFS(广度优先搜索来啦)

一、BFS简介二、BFS解决问题三、代码实现一、BFS简介BFS即breadth-first search,又称为宽度优先搜索,是最简便的图的搜索算法之一,它是使用队列来实现的。已知图G=(V,E)和一个源顶点s,宽度优先搜索以一种系统的方式探寻G的边,从而“发现”s所能到达的所有顶点,并计算s到所有这些顶点的距离(最少边数),该算法同时能生成一棵根为s且包括所有可达顶点的宽度优先树。对从s可达的任意顶点v,宽度优先树中从s到v的路径对应于图G中从s到v的最短路径,即包含最小边数的路径。该算法对有

2020-06-07 22:05:00 115

原创 说说哈希表/散列表

哈希表和散列表是一个东西,只是叫法不同而已。以下统一称呼为哈希表。刚刚学习哈希表的时候,我其实对它的了解不是很深入,只知道它是一种key对应value的复杂数据结构。其实,哈希表包括的内容有很多。哈希表是由哈希函数和数组组成的。哈希函数用来产生 key值,它的主要功能是把输入映射到数字。通过哈希函数,可以把字符串或者其他类型的key值映射为数组的下标 index。哈希函数必须满足以下特征:1、它必须是一致的。假设哈希函数的输入是 "apple"时得到的是4,那么每次输入"a...

2020-06-05 21:17:21 2827

原创 再谈快排(超简单代码)Python

今天看到了快排的另外一种写法,我的天呐,真的好简单,这种快排绝对是我见过最好理解的方法了。我们知道,快排其实是每次给基准元素找到合适的位置。今天这种方法依然围绕这种核心,但是代码简单了很多。快排的实现离不开分治法,利用分治的思想进行递归运算,从而实现快排。接下来开始进行介绍:在进行递归时,我们有两个条件需要找到:1、结束递归的基线条件2、进行递归的递归条件所谓基线条件,其实就是最简单的条件,不可再分的条件,拿排序来说,基线条件就是当数列中没有元素或者只有一个元素时是的情况,在这种情况下,根本不需

2020-06-05 20:34:43 3911

原创 对递归的一些了解

递归指的是一个函数调用自己的函数,递归可以让问题的解决方案更清晰,但是递归并没有性能上的优势。在编写递归时,要告诉程序何时停止递归。正因为如此,每个递归函数都有两个部分:基线条件(base case)和递归条件(recursive case) 。递归条件指的是函数调用自己,而基线条件则指函数不再调用自己,从而避免形成无限循环。如下程序所示:def countdown(i): print i if i <= 1: # 基线条件 return els

2020-06-05 18:12:10 146

hw性格测试1.0.xlsx

文件资源是华为性格测评的答案,仅供参考哦~,因为华为的性格测评要求比较严,一不小心就会挂掉,按照文件中给的建议,很容易就能通过~

2020-11-23

python3实例.zip

Python新手编程练习,帮你打牢每一个知识点,再也不用担心新知识刚学就忘了,里面包含了35个常见问题,对新手友好。

2020-05-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除