编程之旅——编程常出现的错误(警醒⚠️)

发布于 2020-01-16  61 次阅读


1,只定义了需要输入的整数n,却没有输入它(scanf("%d", &n));

2,使用一个数组时,它的原值已经在数值处理中被更改了,不是原值(此时需要设置一个临时变量temp,把数组值付给它,对它进行操作);

3,输出固定字符时,打错了,例如题目需要输出None,却输成了NOne;

4,出现段错误,是访问了非法的内存,一般情况是数组长度设置过小或是访问时数组越界;

5,用fgets输入字符串时,使用strlen计算长度,一定要减1;

6,括号不对称(error: C++ requires a type specifier for all declarations);

7,scanf()整数后,使用fgets,一定要先使用getchar()吸收换行符;

解题详解:

1,最

a,(搜索:深【递归】、宽【队列】(穷举所有的可能性)——(变化的次数)(状态转移的次数、枚举【循环】)穷举

b,动态规划

c,贪心

d,闭式(公式)

2,解题金字塔

阅读——思维:解题方向——工具和技巧——效率优化——细节与调试

3,算法题五种解法

a,举例法:具体例子,到一般规则(公式符号化)

b,模式匹配法:相似问题,到现有问题(经典的变体)

c,简单推广法:从简化版,到复杂版(修改约束条件)

d,简化构造法:从n=1开始(递推或递归)

e,数据结构头脑风暴:链表、数组、二叉树、堆、栈、队列

前缀和?树状数组?区间树?

4,模版需要记住的

1)快速幂取模运算

2)二分法(

查找有序序列给定数x(对于下标从0开始,【left,right】——【0,n - 1】);⚠️:left <= right

【】查找有序序列第一个满足某条件元素的位置(初值必须覆盖所有值【对于下标从0开始的数组,【left,right】——【0,n】);⚠️:left < right

(】查找有序序列第一个满足条件的元素的位置(初值必须覆盖所有值,left比最小值小一)【left,right】——【-1,n】),

⚠️:left + 1 < right

3)two pointers

⚠️:进入函数前要让a对m取模

5,特殊写法

1)eps = 1e-5等价于10^-5

const double PI = acos(-1.0)

int INF = 0x7fffffff       是int上限

6,算法优化

1)dfs对于重复子问题的求解,可以使用动规数组或者记忆型递归


子弟二十不狂没志气!!