X02-Day1-Day3北京德宏笔记
2024-07-25 09:52:11
发布于:北京
声明:
1.我是在DEV上记的笔记,所以有“//”.
2.我在掺杂一些拓展性知识.
3.可能不全.
4.觉得有用就留下一个免费的赞吧.
5.我不是老师
//C++说明书网站:zh.cppreference.com.
//万能头文件
#include<bits/stdc++.h>
//常用头文件
#include <iostream> //用于输入和输出操作.
#include <string> //用于处理字符串的类和函数.
#include <algorithm> //提供一些算法.
#include <cmath> //提供一系列数学函数和常量,进行数值计算和数学操作.
#include <queue> //提供队列(允许在一端添加元素,并在另一端删除元素)数据结构的实现.
#include <vector> //提供向量(动态数组)容器.
#include <functional> //用于进行文件输入和输出操作.
using namespace std;
const int N=100000001;
int main(){
//算法特性:
//1.有穷性;
//2.确定性;
//3.可行性;
//4.零个或多个输入;
//5.一个或多个输出 ;
//可以不输入但一定要有输出 .
//高斯算法:1+2+3+4....+n=(1+n)*n/2 .
//时间复杂度:O( ).
//若为常数阶则为O(1).
//只保留最高阶 .
//2^x=n,x=log2n
//n^x=y,x=logny
//O(1) 常数时间 快
//O(logN) 对数时间
//O(N) 线性时间
//O(NlogN) 对数线性时间
//O(N^2) 二次时间
//O(N^3) 三次时间
//O(2^N) 指数时间
//O(N!) 阶乘时间 慢
//C++极限运行次数:一秒10^8次
//模拟算法 :
//问题怎么描述,程序步骤怎么设计 .
//埃氏筛法:
//在大于1的自然数中把不大于根号N的所有素数的倍数剔除.
//线性筛法:
//每个数都被它素数筛掉.
//代码:
int ss[N],pr[N];
int n,num=0;
cin>>n;
for(int i=2;i<=n;i++){
if(!ss[i]) pr[num++]=i;
for(int j=0;j<num&&i*pr[j]<=n;j++){
ss[i*pr[j]]=1;
if(i%pr[j]==0) break;
}
}
//"[ ]"开区间,取头尾.
//"( )"闭区间,不取头尾.
//ASCLL:'a' 97 'A' 65 '0' 48.
vector :
// 一个可变长的数组(动态数组),采用连续储存的空间来储存数据,它的元素类型也可以是任意的内置类型或自定 义类型.
vector<int> a(n, val);
// 定义一个任意类型的vector,并用n个val来初始化vector.
vcetor<int> v1;
vcetor<double> v2;
vector<string> v3;
// 定义一个任意类型的空vector.
v1.push_back(x);
//在v1中插入x.
v1.size();
//查看v1的长度.
sort(v1.begin(),v1.end());
//将v1进行排序(升序).
vector<int> v5(v4.begin(), v4.end());
// 用v4的迭代器区间来初始化v5.
vector<int> v6(s.begin(), s.end());
// 用s的迭代器区间来初始化v6.
进制转换 :
//二进制:B
//八进制:O
//十进制:D
//十六进制:H
//二进制转八进制:整数部分自右向左,小数部分自左向右 例1:B(1 101 110.101 1)=O().
//十进制转k进制:整数部分:除k取余,逆序排列. 小数部分:乘k取整,到0为止,顺序排列. 例2:D(42.125)=B(101010.001).
//k进制转十进制:按权展开发. 例3:B(1011.110)=D(11.6).
十进制转二进制 :
代码 :
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int a[101] = {0};
int i = 1;
while (n != 0) {
a[i] = n % 2;
n /= 2;
i++;
}
for (int j = i - 1; j >= 0; j--) cout << a[j];
return 0;
}
二进制转十进制 :
#include <iostream>
using namespace std;
int main() {
string n;
cin >> n;
int sum = 0;
for (int i = 0; i < n.size(); i++) {
if (n[i] == 1) sum += pow(2, n.sice() - i - 1);
}
cout << sum;
return 0;
}
//原码反码补码:
//符号位:0为正数,1为负数.
//原码:由符号位和8位数字位(二进制)组成.
//反码:正数反码与原码相同,负数反码与原码符号位相同,数字位取反.
//补码:正数补码与原码相同,负数补码是其反码加1.
//位运算:
//按位与 &:两边同为1为1,其余为0.
//按位或 |:两边有1为1,无1为0.
//按位非 ~:将二进制取反,1为0,0为1.
//按位异或 ^:两边相同为0,不同为1.
//按位左移 <<:所有数位向左移动m位(n*2^m).
//按位右移 >>:所有数位向右移动m位(n/2^m).
//格雷码:
//二进制转格雷码:二进制最高位为格雷码最高位,格雷码其余位为二进制码对应位的与其上一位相异或.
//格雷码转二进制:格雷码最高位为二进制最高位,二进制其余位为格雷码对应位与其上二进制码一位相异或.
//计算机存储:
//最小单位:比特(bit):储存一位二进制.
//基本单位:字节(B):1B=8bit.
//1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB.
//图像大小计算公式:像素总数*位深度/8(B).
//二分查找:
//超简便函数:
//数组写法:
//查找第一个>=x的数的下标:
int pos=lower_bound(a+1,a+n+1,x)-a;
//查找第一个>x的数的下标:
int pos2=upper_bound(a+1,a+n+1,x)-a;
//vector写法(下标从0开始):
//查找第一个>=x的数的下标:
int pos=lower_bound(a.begin(),a.end(),x)-a.begin();
//查找第一个>x的数的下标:
int pos2=upper_bound(a.begin(),a.end(),x)-a.begin();
return 0;
}
全部评论 2
再打个广告:https://www.acgo.cn/application/1754342654724354048
2024-07-25 来自 北京
1太实用了
2024-07-25 来自 北京
0
有帮助,赞一个