《算法笔记》学习记录007
一、学习概览
p74~80
2.9.1cin与cout
1.添加头文件
cin>>与cout<<,添加头文件“#include”和“using namespace std;”。
2.cin用法
#include <iostream>
using namespace std;
int main(){
int n;
double db;
char c;
char str[100];
//string str;
cin>>n;
//读入多个变量
cin>>n>>db>>c>>str;
//读入一整行,用getline函数
//把一整行读入char型数组str[100]中
cin.getline(str,100);
//string容器——第6章
//getline(cin,str);
return 0;
}
3.cout用法
#include <iostream>
#include <iomanip> //控制double精度时用到
using namespace std;
int main(){
int n;
double db;
char c;
char str[100];
//输出多个变量
cout<<n<<db<<c<<str;
//在变量中间加空格或字符串
cout<<n<<" "<<db<<" "<<c<<" "<<str;
cout<<n<<"haha"<<db<<"heihei"<<c<<"wawa"<<str;
//两种换行方式,endl=endline
cout<<n<<"\n"<<db<<endl;
//控制double型的精度,下面输出123.46
cout<<setiosflags(ios::fixed)<<setprecision(2)<<123.4567<<endl;
return 0;
}
2.9.2浮点数的比较
1.==
引入一个极小数eps:
#include <stdio.h>
#include <math.h>
const double eps=1e-8;
#define Equ(a,b) ((fabs((a)-(b)))<(eps)) //fabs()绝对值函数
int main(){
double db=1.23;
if(Equ(db,1.23)){
printf("true");
}else{
printf("false");
}
return 0;
}
必须使用Equ函数的情况:
#include <stdio.h>
#include <math.h>
int main(){
double db1=4*asin(sqrt(2.0)/2);
double db2=3*asin(sqrt(3.0)/2);//sqrt开平方根
if(db1==db2){
printf("true");
}else{
printf("false");
}
return 0;
}
修正误差后:
#include <stdio.h>
#include <math.h>
const double eps=1e-8;
#define Equ(a,b) ((fabs((a)-(b)))<(eps))
int main(){
double db1=4*asin(sqrt(2.0)/2);
double db2=3*asin(sqrt(3.0)/2);//sqrt开平方根
if(Equ(db1,db2)){
printf("true");
}else{
printf("false");
}
return 0;
}
2.其他定义
#include <stdio.h>
#include <math.h>
const double eps=1e-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)) //<=
3.注意
- 保证变量在定义域内
- 用eps修正编译器输出-0.00
2.9.3复杂度
1.时间复杂度
- 基本定义:时间复杂度 基本运算 评估算法时间效率的有效标准 时间复杂度的常数
- 高等级的幂次会覆盖低等级的幂次
- 对于一般的OJ系统,一秒能承受的运算次数大概是10^7 ~ 10^8。
2.空间复杂度
考虑到空间一般够用,常采用空间换时间的策略。