)
前言在我写的C程序员常犯的错误这些坑你踩过吗这篇文章的基础上继续补充的这些都是我平常总结出来的知识点其实更多的是从我同学那里的错误总结出来的对于在考试时会有很大的帮助。所以感谢各位大佬的大力支持一、用double或sqrt()输出时会导致输出内容与样例不符有时候当你用double或long double时你用它输出一个比较大的数它会给你输出这个数的科学计数法。比如说你运行一下代码#includebits/stdc.h using namespace std; int main(){ double a 1000000 ; cout a ; return 0; }那么结果不是1000000而是转为科学计数法的1e006。想要输出1000000就把它转为int型。#includebits/stdc.h using namespace std; int main(){ double a 1000000 ; cout (int) a ; return 0; }在很多题目中有用到开平方也就是sqrt()由于很多题目给的样例的开方都是整数可是如果输出一个正整数的开方比如#includebits/stdc.h using namespace std; int main(){ int a 13 ; cout sqrt(13) ; return 0; }运行后的结果是3.60555四舍五入可是有些题目只要整数。所以#includebits/stdc.h using namespace std; int main(){ int a 13 ; cout (int)sqrt(13) ; return 0; }二、能贪就贪不会用暴力实在不行骗分。1. 数据范围超出long long范围。如果数据范围超出long long的范围甚至还要大的时候那么可以考虑使用字符串了。用字符串就可以大大节省了时间时间是宝贵的一寸光阴一寸金......当然了我们也可以减少循环次数以达到效果。说到贪心它有时候需要排序但考试的题目大都是是不排序的。要排序那也太容易AC了2. 有些题目的数据大其实是个数学问题。有题目会有些复杂很多人看不出来其中的奥妙只会暴力或骗分。只要多开几组数据也许就会发现它的公式或者是数学规律。你直接套进去用就可以了但是会花费一点时间所以平常练习中就要多做这一类的题目比赛时就很容易知道思路。3. 真的不会骗分。我有个同学不知道我就再讲一遍唉......题目下面总会有数据范围嘛按照给的范围思考出不同的情况如果有部分分数据范围较小就直接暴力呗要不然就找数学公式或规律。三、求区间的用前缀和或差分有题目你给你一个序列a再给个l和r要求出他们直间......按题目要求。按普通的一个个枚举倒不会AC。那么就要用到前缀和或着差分。关于前缀和和差分我就不多讲了有时间的可以去练习以下的题目。P8218 【深进1.例1】求区间和P1314 [NOIP2011 提高组] 聪明的质监员P1955 [NOI2015] 程序自动分析四、正难则反有些题目你按照他们的思路则会感到很绕。那么你就可以从另一个角度来思考。比如说有道题要你判断a到b之间的数的二进制只有一个0的数有多少个按照普通思路我们要把这个数转为二进制再以此判断有点麻烦。那我们就可以从另外一个角度来思考。1.枚举二进制的长度2.枚举对应长度下的0的位置3.二进制转十进制只要再a和b之间即可。结束语这就是我总结的一些常犯错误下次还会更新感谢支持与鼓励有不懂的或没讲清楚可以在评论区里留言~~