1.给定的时间限制是1s,表示运算可以在百万级别,即不能超过一千万。
2.break和continue的用法区别:
break结束本层循环,重点在两个,一个是结束本层,另外是结束的是循环
continue结束本次循环,即其后的代码不再被执行,再执行下一次循环
3.字符串的声明:C中不能使用string声明字符串,而是用char,正常下只能放一个字符,但用char数组后可以声明字符串
4.字符串的比较:字符串的比较用strcmp,比如学号。
5.记住一点,查询时一条条输入的,不是一起输入的,用循环控制即可,不一定非要用for循环控制,可以用while循环控制
6.注意每次循环中变量的作用范围,循环的边界和含义,以及用另外的参数值记录下循环内的变量值得思想。
7.注意只有用strcmp函数,则必须在构造体的构造器中重载一下。
8.输出时,double型的,用%lf,即long float来输出。float则用%f来输出即可。同时,小数点后3位,就用%.3lf来输出即可
9.贪心算法:选择性价比最高的,套用循环即可。碰到安排工作事务的贪心算法,记得可以用最迟的结束时间来进行安排
10.堆栈类:引用库函数中的堆栈stack,注意向栈中压入的是什么,可以是序号,而不是具体内容。
11.哈夫曼树的理解:重点,叶结点的带权路径和最小(带权路径:叶结点的权值*路径长度)
算法:选两个最小的节点,向上构造树。
计算哈夫曼树的值:加和非叶结点(算法方便)或者计算叶结点
12.堆,用优先队列实现,此队列默认是大根堆,建小根堆要特意声明,注意第三个变量后面要有空格才能运行正确
在使用队列或者栈的时候要先清空。Q.pop();即可。
同时,在将元素输入队列时,要逐个处理,不要一起输入后再处理,很麻烦。
13.树的使用,最基本的,树的结构体(普通struct型),节点的建立(Node型,且固定要返回&Tree[loc++]),使用后者或者其他方法时,有返回值得,定义变量用方法方式使用即可,在主函数里面引用的时候也是同理。
注意,落点在节点的使用变化上,不在于树的整体。不要轻易使用return,这是结束的标志。多个if迭用,是遍历的特点。
由中序遍历和前序遍历确定后序遍历(先判断左右子树是否为空,然后递归),也是递归,不断缩小左右子树。
14.对于栈,队列的使用,使用之前要先清一下。否则运行过不去,报错。用Q.pop()来清。包括创建树时,loc在使用要变成零。
这在提醒你,在基于基本循环时,一定要注意变量的初始化。比如之前就是因为没有在使用时令size=0。其次,NULL要大写。在插入树的时候,要x>或X<写清楚,即不能通过同样数值的节点。绝对不能含糊。
字符串的输入,当没有给定字符串长度时,不要用数组来控制输入。用字符串整体获得。“%s”,即可。然后得到char型,用char-'0',转化得到int型,以便能数值比较建立二叉排序树。在输出值得时候,再转化成char型即可。
同时,字符串的赋值要使用strcpy(str1,str2),不能直接赋值=得到。
一样,字符串的比较要用strcmp(str1,str2),要在函数头部声明,<string.h>
树的建立时,creat(),是在T==NULL时来使用的,即可。因为不为空的时候,会先判断,并不创建节点,是在跳到为空的部分建树。
15.严格按照题目中所给的输入格式,不能是换行输入。则在同一个输入中,并排输入两个%d即可。
最好不要复制粘贴,代码量少。因为你很容易不能完全将代码变量名改全改对。
注意,数字再大,有时注意看要的是不是位数,而不是本身数值。在本身数值来说的话,多大都无所谓,一个整数声明就可以了
一定要记得串遍历的另外一种方式,用str[i]!=0即可,不必非要像数组那样,知道位数再遍历
16.进制转化的思想等价于剥离十进制数字上的每一位。用取余数和取被除的整数,循环判断用while(a!=0)即可
注意,char型,字母和数字间或者数字向数字的转换,也可以用加减来计算,只不过加减的是‘字母或数字’,字母间的加减所得结果是int型。判断字母是啥,直接用其跟大小写字母或者数字进行比较就行。其中,若是两个条件的判断,直接使用?:;来判断就行
17.小细节:long long 中间要有空格 ;循环减的时候要注意i--;
18.求最大公约数:欧几里得算法。即调用int gcd (int a ,int b) 的递归,由于最大公约数的性质,则只需递归调用b, a%b 即可,直到较小的b为零。
最小公倍数:a*b/最大公约数