编程技巧与陷阱:动态规划与指针解析

需积分: 0 0 下载量 148 浏览量 更新于2024-08-04 收藏 113KB DOCX 举报
这篇资源主要涵盖了编程中的若干小技巧和易错点,主要涉及动态规划、数值计算、指针操作、算法效率以及字符串处理等多个方面。以下是详细的解释: 1. **动态规划**: 动态规划是一种解决复杂问题的有效方法,通过构建状态数组(如dp[])来逐步解决问题。在计算过程中,需要注意状态转移方程的正确性,特别是当某个状态被多次引用时,要确保使用正确的索引。例如,dp[n]在计算p+1时可能会直接返回已计算的结果,而不是预期的新区间值。 2. **浮点数计算**: 在涉及到浮点数计算时,由于系统四舍五入可能引入误差,可以使用微小的偏移量(如加减0.00000000001)来补偿。 3. **字符输出**:字符'\0'是一个终止符,在输出时虽然不显示,但会影响输出结果,过多的字符输出可能导致错误。 4. **三元运算符**:`(x>y)?x:y;` 是C/C++中的三元运算符,用于根据条件选择执行其中一个表达式。 5. **递归复杂度分析**:分析递归算法的时间复杂度,主要看计算了多少个不同的状态。 6. **排序算法比较**:快速排序(quicksort)通常比归并排序(mergesort)更快,但在最坏情况下,归并排序有更稳定的性能。 7. **指针操作**:`int *p = &a;` 定义了一个指向整型变量a的指针,对指针p的操作会影响到a的值,而`*p`表示解引用操作,改变`*p`相当于改变p所指向的值。 8. **大数处理**:在处理大数时,避免溢出可先除后加,同时考虑使用更大的数据类型如`long long int`。左移`<<`相当于乘以2,右移`>>`相当于除以2,异或操作`^`有其独特的应用,例如计算二进制数的补码。 9. **头文件包含**:`#include "xxx.h"` 会将指定的头文件内容插入到当前源文件中,相对路径是指相对于当前编译文件的路径。 10. **extern关键字**:用于声明在其他文件中定义的变量,使得其他文件能够访问。 11. **返回值**:`return 0 * puts ("-1");` 可以用来直接输出错误值,因为puts函数返回的是输出的字符数,乘以0后整个表达式的结果为0,符合标准的返回值。 12. **浮点数上取整**:对于浮点数a/b的上取整,可以使用 `(a + b - 1) / b` 的方法。 13. **宽度优先搜索**(BFS):使用队列实现,优先处理最早添加的元素,适用于寻找最小步骤的问题。 14. **模运算优化**:在进行大数乘法求模运算时,可以先对每个乘数求模,然后再相乘求模,以减少计算量。 15. **字符串处理**:`cstring`库的函数大多只适用于`char[]`,不适用于`string`类型。字符'0'可以输出,数字0则不行;字符串在遇到'0'时停止输出,因此在字符串末尾加'0'可避免异常输出。`string`类型没有数字0的概念,可以直接相加,用`""`来比较字符串。 16. **字符串函数**:对于字符串的比较和复制,应使用`strcpy`和`strcmp`,而字符可以直接赋值。 以上这些知识点在编程实践中非常重要,理解并掌握它们能帮助提升代码质量和效率。