算法笔记2.9补充
程序员文章站
2022-05-10 23:00:39
...
2.9.1 cin与cout
读入多个变量,读入了int 型变量n、double型变量db、char 型变量c、char 型数组str[]:
cin>>n>>db>>C>>str;
如果想要读入一整行,则需要使用getline函数,
把一整行都读入char型数组str[100]中:
char str[100] ;
cin.getline(str,100);
而如果是string容器(第6章会介绍),则需要用下面的方式输入:
string str;
getline (cin,str);
cout << n <<"\n"<< db << endl;
如果想要控制double型的精度,要加上#include <iomanip>头文件。下面的代码会输出123.46:
cout << setiosflags(ios: :fixed) << setprecision(2) << 123.4567 << endl;
不推荐读者使用cin跟cout来进行输入和输出,因为它们在输入/输出大量数据的情况下表现得非常糟糕,
有时候题目的数据还没有输入完毕就已经超时。
因此还是推荐读者使用C语言的scanf与printf 函数进行输入/输出,只有在十分必要的时候
才使用cin与cout(例如第6章会介绍的string)。
2.9.2浮点数的比较
1.
由于计算机中采用有限位的二进制编码,因此浮点数在计算机中的存储并不总是精确的。
例如在经过大量计算后,一个浮点型的数3.14在计算机中就可能存储成3.140000000001,
也有可能存储成3.139999999999,
这种情况下会对比较操作带来极大的干扰(因为C/C++中的“==”操作是完全相同才能判定为true)。
于是需要引入一个极小数eps来对这种误差进行修正。
----------------
2.
如果想要使用不等于,只需要
在使用时的Equ前面加一个非运算符“!”即可(!Equ(a, b))。
#include <stdio.h>
#include <math.h>
const double eps= 1e-8;
#define Equ(a,b) ((fabs((a)-(b)))<(eps))
int main() {
double db = 1.23;
if (Equ(db, 1.23) ) {
printf ("true") ;
} else{
printf ("false") ;
return 0;
>
大于b+eps的数才能判定为大于b (也即a减b大于eps)。
#define More(a,b) (((a)-(b))> (eps))
>=
大于b- eps的数都应当判定为大于等于b (也即a减b大于- eps)。
#define MoreEqu(a,b) (((a)-(b))>(-eps))
<
小于b- eps的数才能判定为小于b (也即a减b小于eps)。
#define Less(a,b)(((a)-(b))<(-eps))
<=
小于或者等于b,因此小于b+eps的数都应当判定为小于等于b (也即a减b小于eps)。
#define LessEqula,b) (((a)-(b))<(eps))
3.圆周率π
const double Pi=acos (-1.0) ;
把上面的所有核心部分汇总起来就是下面这些代码:
const double eps=le-8;
const double Pi=acos (-1.0) ;
#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) )
2.9.3复杂度
1.
O(1) < O(logn) < O(n) < O(n^2)成立。
对1般的OJ系统来说,一秒能承
受的运算次数大概是10^7 ~ 10^8,因此O(n^2)的算法当n的规模为1000时是可以承受的,而当
n的规模为100000 时则是不可承受的。
2.
例如对某个算法来说,如果其消耗的最大数据空间是一个二维数组,那么这个算法的空间复
杂度就是O(n^2)。在1般的应用中,1般来说空间都是足够使用的(只要不开好几个10^7以上
的数组即可,例如int A[10000][10000]的定义就是不合适的),
因此其重要性一般没有时间复杂度那么大。另外,0(1)的空间复杂度是指算法消耗的空间不随数据规模的增大而增大。
考虑到空间一般够用,因此常常采用以空间换时间的策略,
例如4.2节的散列法就是一种以空间换时间的高效方法。
下一篇: php面试需要掌握的基础题目锦集