机试算法问题-Mark

本文详细介绍了C语言编程中常见的算法和数据结构,包括字符串处理、循环控制、堆栈、队列、树的遍历、哈夫曼树、贪心算法等,并强调了细节处理和输入输出格式的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/最大公约数


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值