☰
C++小白常犯的错误,这些坑你踩过吗?-(二)
2026/10/4 1:40:35 网站建设 项目流程

前言

在我写的C++程序员常犯的错误,这些坑你踩过吗?这篇文章的基础上继续补充的,这些都是我平常总结出来的知识点(其实更多的是从我同学那里的错误总结出来的),对于在考试时会有很大的帮助。所以感谢各位大佬的大力支持!!!

一、用double或sqrt()输出时会导致输出内容与样例不符

有时候当你用double或long double时,你用它输出一个比较大的数,它会给你输出这个数的科学计数法。

比如说你运行一下代码:

#include<bits/stdc++.h> using namespace std; int main(){ double a = 1000000 ; cout << a ; return 0; }

那么,结果不是1000000,而是转为科学计数法的1e+006。

想要输出1000000,就把它转为int型。

#include<bits/stdc++.h> using namespace std; int main(){ double a = 1000000 ; cout << (int) a ; return 0; }

在很多题目中有用到开平方,也就是sqrt(),由于很多题目给的样例的开方都是整数,可是如果输出一个正整数的开方,比如

#include<bits/stdc++.h> using namespace std; int main(){ int a = 13 ; cout << sqrt(13) ; return 0; }

运行后的结果是3.60555(四舍五入),可是有些题目只要整数。

所以

#include<bits/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之间,即可。

结束语

这就是我总结的一些常犯错误,下次还会更新,感谢支持与鼓励!!!

有不懂的或没讲清楚可以在评论区里留言~~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询