算法笔记系列:2.9 补充 2.10 黑盒测试
2.9.1 cin与cout
-
C++ 中对应scanf和printf的比较方便的输入输出
-
具体使用方法,以输入多个变量和输出多个变量为例:
cin >> n >> db >> c >> str;//按对应顺序输入
cout << n << db << c << str;//按对应顺序输出
- cout进行输出时中间是没有空格的,要自己手动加,以及两种换行方式 “\n”和endl
2.9.2 浮点数的比较
-
浮点数在经过大量计算后,计算机存储可能会有偏差
-
引入一个很小的数 e p s = 1 0 − 8 eps=10^{-8} eps=10−8进行修正
-
为了表示方便定义成宏定义的形式
const double Pi=acos(-1.0);
const double eps=1e-8;
# define Equ(a,b) ((fabs((a)-(b)))<(eps))
# define More(a,b) (((a)-(b))>(eps))
# define Less(a,b) (((a)-(b))<(-eps))
# define MoreEqu(a,b) (((a)-(b))>(-eps))
# define LessEqu(a,b) (((a)-(b))<(eps))
-
由于精度问题,在经过大量计算后,0可能是一个很小的负数,开跟就会因为不在定义域内进行报错需要用eps保证在定义域内
-
某些情况下,0.00在输出时会变成-0.00,这是本身编译环境的bug,只能把结果放在字符串中与-0.00比较,然后用eps修正
2.9.3 复杂度
- 时间复杂度
-
高等级的幂次会覆盖低等级的幂次
-
二分查找属于O(logn)
-
- 空间复杂度
-
例如二维数组就是O(n^2)
-
一般空间都是够用的,考虑空间换时间
-
- 编码复杂度
2.10.1 单点测试
程序判断每组数据输出结果是否正确,通过一组数据或者一组数据的分数,PAT就是采用的单点测试
2.10.2 多点测试
多点测试要求程序能一次运行完所有数据,大部分在线评测系统都采用了这种方式
-
while…EOF型:通过读取失败来判断读取已经结束,从而结束程序的循环
-
while…break型:通过判断满足某些结束条件来结束循环
-
while(T–)型:已知有多少组数据,或者知道程序要循环多少次