前言:写这篇博客完全是给自己当做笔记用的,考虑到自己的c++基础不是很踏实,只在大一学了一学期,c++的面向对象等更深的知识也一直没去学。就是想当遇到一些比较小的知识,切不值得用一整篇

博客去记述的时候,可以考虑到都汇总在这,时不时回来复习一下也挺好。总之,这篇博客可能会不断更新,emmm,内容上也完全是准对我啦(可能更多都是算法上的知识点),大家如果看到了也别吐槽内容太乱太杂或太基础,哈哈。

1三角函数,反三角函数,求夹角

C++中cos,sin,asin,acos这些三角函数操作的是弧度(实数,非复数),而非角度,你需要把角度转化为弧度.

弧度=角度*Pi/180;

对于两条边的夹角θ=acos(v1⋅v2/||v1||||v2||),注意θ是弧度值。

demo如下

 #include<bits/stdc++.h>
using namespace std;
struct Point{
double x;
double y;
};
double PI=3.1415926;
double Long=;
double computeLength(Point p1,Point p2)
{
double l=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
return l;
}
//求两条边的夹角大小
double jiaoDu(Point A,Point B,Point C)
{
double BA=computeLength(A,B);
double BC=computeLength(B,C);
double X=(A.x-B.x)*(C.x-B.x)+(A.y-B.y)*(C.y-B.y);
double X1=X/BA*BC;//角度变弧度
return acos(X1)*/PI;
}
//求弧长
double huChang(double r,double jiaodu){
double huDu=jiaodu*3.1415926/;
return huDu*r;
}
int main()
{
int n=;
cout << "请输入三个点的坐标" << endl;
Point point[];
for(int i=;i<=n;i++){
cin >> point[i].x;
cin >> point[i].y;
} cout << "向量BA的长度为" << setiosflags(ios::fixed) << setprecision()<<computeLength(point[],point[]) << endl;
cout << "向量BC的长度为" << setiosflags(ios::fixed) << setprecision()<<computeLength(point[],point[]) << endl;
double a=jiaoDu(point[],point[],point[]);
cout << "角ABC的大小为为" << setiosflags(ios::fixed) << setprecision()<<jiaoDu(point[],point[],point[]) << endl;
return ;
}

2malloc和new的区别

1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
4,C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
5、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。

 #include <bits/stdc++.h>
using namespace std; int main()
{
int *p=new int[];
p[]=;
delete p;
p=NULL; int *p1=(int *)malloc(sizeof(int)*);
p1[]=;
cout << p1[] << endl;
free(p1); return ;
}

3字符串和数组的几个小知识

  string str="hello";
char arr[];
strcpy(arr,str.c_str());//字符串变字符数组 strlen(arr1)//求字符数组的长度
str.length();//求字符串的长度
sizeof(arr2)/sizeof(int);//求整数数组的长度 *max_element(array,array+n)//求数组里面的最大值是谁,不改变数组
*min_element(array,array+n)//求数组里面的最小值是谁,不改变数组 reverse(str.begin(),str.end());//反转字符串 reverse(arr,arr+n);
puts(arr);//反转数组 srand((unsigned)time(NULL));
rand()%;//产生随机数、 bool cmp(int a,int b){
return a>b;
}
sort(a,a+n,cmp)//从大到大小排序 void func(int **array,int m,int n){} <==> void func(int array[][],int m,int n){}

4两种全排列算法(排列的结果的顺序不同)

 #include <bits/stdc++.h>
using namespace std;
int num1=;
int num2=;
void Swap(int &a,int &b){
int temp;
temp=b;
b=a;
a=temp;
} void perm(int array[],int k,int m){
if(k==m){
for(int i=;i<=m;i++){
cout << array[i] << " ";
}
cout << endl;
num1++;
}
else{
for(int i=k;i<=m;i++){
Swap(array[k],array[i]);
perm(array,k+,m);
Swap(array[k],array[i]);
}
}
} int main()
{
int array[]={,,,,,,,,,};
sort(array,array+sizeof(array)/sizeof(int));
perm(array,,);//方法一:自定义排序函数
cout << "0~4的全排列总有" << num1 << "种" << endl;
cout << "----------------------------------------------------------------" << endl;
do{
for(int i=;i<;i++){
cout << array[i] << " ";
}
num2++;
cout << endl;
}while(next_permutation(array,array+));//方法二:使用next_permutation(array,array+n);实现排序
cout << "0~4的全排列总有" << num2 << "种" << endl;
return ;
}

5二分查找

 1 #include <bits/stdc++.h>
2 using namespace std;
3 int binarysearch(int array[],int x,int n){
4 int left=0;
5 int right=n-1;
6 while(left<right){
7 int middle=(left+right)/2;
8 if(array[middle]==x) return middle;
9 if(array[middle]<x) left=middle+1;
10 if(array[middle]>x) right=middle-1;
11 }
12 return -1;
13 }
14 int main()
15 {
16 int array[10]={3,2,1,5,6,7,8,9,4,0};
17 sort(array,array+10);
18 int a=binarysearch(array,10,sizeof(array)/sizeof(int));
19 if(a==-1) cout << "没找到" << endl;
20 else cout << "找到该数字,在顺序排列后的数组的下标为" << a<< endl;
21 return 0;
22 }

6合并排序

 template<class Type>
void MergeSort(Type a[],int left,int right)
{
if(left<right){//至少有两个元素
int i=(left+right)/;//取中点
MergeSort(a,left,i);
MergeSort(a,i+,right);
Merge(a,b,left,i,right);//合并到数组b
Copy(a,b,left,right);//复制回数组a
}
}
 #include <bits/stdc++.h>

 using namespace std;
template<class Type>
int Merge(Type a[],Type c[],int l,int m,int r){
int i=l;
int j=m+;
int k=;
while((i<=m) && (j<=r)){
if(a[i]<=a[j]) c[k++]=a[i++];
if(a[i]>a[j]) c[k++]=a[j++]; }
if(i<=m)
{
for(int q=i;q<=m;q++){
c[k++]=a[q];
}
}
if(j<=r){
for(int q=j;q<=r;q++){
c[k++]=a[q];
}
}
return ;
}
template<class Type>
int MergeSort(Type a[],Type b[],int left,int right){
if(left<right){
int i=(left+right)/;
MergeSort(a,b,left,i);
MergeSort(a,b,i+,right);
Merge(a,b,left,i,right);
}
}
int main()
{
int a[]={,,,,,,,,,,,};
int b[];
MergeSort(a,b,,);
for(int i=;i<=;i++){
cout << b[i] << " ";
}
return ;
}

7快排

 #include <bits/stdc++.h>
using namespace std;
void Swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
} int Partition(int a[],int p,int r)
{
int i=p;
int j=r+;
int x=a[p];
while(true){
while(a[++i] < x && i<r);
while(a[--j] > x);
if(i>=j) break;
Swap(a[i],a[j]);
}
a[p]=a[j];
a[j]=x;
return j;
}
void QuickSort(int a[],int p,int r)
{
if(p<r){
int q=Partition(a,p,r);
QuickSort(a,p,q-);
QuickSort(a,q+,r);
}
}
int main()
{
int array[]={,,,,,,,,,};
QuickSort(array,,);
for(int i=;i<;i++){
cout << array[i] << " ";
}
return ;
}

8半数集

 long f(int n){
long sum=;
if(a[n]>) return a[n]; for(int i=;i<=n/;i++){
sum += f(i);
}
a[n]=sum;
return sum;
}

9集合划分

 int f(int n,int m)
{
if(n==) return ;//只有一个集合
if(m==m) return ;//每个元素一个集合
else{
return m*f(n-,m)+f(n-,m+);//向n-1个元素划分的m个集合里添加一个新元素,有m*f(n-1,m)种,
} //向n-1个元素划分的m个集合里添加一个独立元素,有f(n-1,m+1)种, }

10整数因子分解问题

 void f(n)
{
if(n==) num+=;
for(int i=;i<=n;i++){
if(n%==) f(n%i);
}
}

11利用二分法求最大值

 #include<bits/stdc++.h>
using namespace std;
int getMax(int array[],int begin,int end)
{
if(begin==end) return array[end];
int mid=(begin+end)/;
int max1=getMax(array,begin,mid);
int max2=getMax(array,mid+,end);
return max1>max2?max1:max2;
}
int main()
{
int array[]={,,,,,,,,,,,,,};
cout << getMax(array,,);
return ;
}

12二叉树遍历(递归)

 typedef struct node                           //定义二叉树的结点
{ int data; //结点的数据
struct node*lChild,*rChild; //结点左右孩子
}Node;
void inOrder(Node *root) //中序遍历
{
if(root!=) //如果根节点不为0
{
inOrder(root->lChild); //指向左孩子
printf("%d ",root->data); //打印当前结点
inOrder(root->rChild); //指向右孩子
}
}

13最大字段和

  int MaxSum(int n,int a[])
{
int sum = ;
int b = ;
for(int i = ; i <= n; i++)
{
if(b > )
b += a[i];
else
b = a[i];
if(b > sum)
sum = b;
}
return sum;
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~不断更新中。

c++常考算法知识点汇总的更多相关文章

  1. 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token

    为什么你学不会递归?告别递归,谈谈我的一些经验   可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...

  2. BFS与DFS常考算法整理

    BFS与DFS常考算法整理 Preface BFS(Breath-First Search,广度优先搜索)与DFS(Depth-First Search,深度优先搜索)是两种针对树与图数据结构的遍历或 ...

  3. Leetcode——二叉树常考算法整理

    二叉树常考算法整理 希望通过写下来自己学习历程的方式帮助自己加深对知识的理解,也帮助其他人更好地学习,少走弯路.也欢迎大家来给我的Github的Leetcode算法项目点star呀~~ 二叉树常考算法 ...

  4. C++常考面试题汇总

    c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...

  5. C++常考面试题汇总(持续更新中)

    c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...

  6. Mybatis常考面试题汇总(附答案)

    1.#{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是预编译处理,${}是字 ...

  7. C++常考算法

    1 strcpy, char * strcpy(char* target, char* source){  // 不返回const char*, 因为如果用strlen(strcpy(xx,xxx)) ...

  8. Linux命令面试常考的简单汇总

    1.显示日期与时间的命令:date 2.显示日历的命令:cal 3.简单好用的计算器:bc 4.热键“命令补全或文件补齐”:Tab 5.热键“中断目前程序”:Ctrl+C 6.热键“键盘输入结束(En ...

  9. .NET面试常考算法

    1.求质数    质数也成为素数,质数就是这个数除了1和他本身两个因数以外,没有其他因数的数,叫做质数,和他相反的是合数,    就是除了1和他本身两个因数以外,还友其他因数的数叫做合数. 1 nam ...

随机推荐

  1. 程序以html形式发送邮件注意问题

    1.样式要写在内部,不要单独定义样式 2.div 使用背景图片在有些浏览器中出不来这时候需要用: <table style="width: 640px" cellpaddin ...

  2. 数据结构C语言版干货------->线性表之顺序表

    一:头文件定义 /*************************************************************************** *项目 数据结构 *概要 逻辑 ...

  3. javascript笔记(二)

    concat() 连接多个字符串,返回合并后的字符串. 1 var s1="a"; 2 var s2="b"; 3 var s3="c"; ...

  4. python-Django收集主机信息

    1.创建工程simplecmdb django-admin.py startproject simplecmdb 2.创建应用 cd simplecmdb python manage.py start ...

  5. 素数环:NYOJ--488--dfs||hdu-1016-Prime Ring Problem

    /* Name: NYOJ--488--素数环 Author: shen_渊 Date: 15/04/17 15:30 Description: DFS,素数打个表,37以内就够用了 */ #incl ...

  6. codeforces 598C C. Nearest vectors(极角排序)

    题目链接: C. Nearest vectors time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  7. leetcode 7 Reverse Integer(水题)

    so easy,注意一下输入不爆int但是反转以后可能爆int. class Solution { public: int gao(int w){ ) ; else{ ; while(w--){ an ...

  8. BZOJ5324 JXOI2018 守卫

    传送门 这是我见过的为数不多的良心九怜题之一 题目大意 给定一段$n$个点构成的折线,第$i$个折点的坐标是$(i,h_i)$,你可以在$i$点放置一个视野,定义$i$能看到$j$当且仅当$i$处有视 ...

  9. Tensorflow 数据导入

    导入数据 借助 tf.data API,您可以根据简单的可重用片段构建复杂的输入管道.例如,图片模型的管道可能会汇聚分布式文件系统中的文件中的数据.对每个图片应用随机扰动,并将随机选择的图片合并成用于 ...

  10. CSS之EM相对单位

    之前以为em单位只是在font-size中起到继承作用, 后来慢慢觉得,继承,应该是在几乎所有样式中都可以是实现的,比如height,width,border... 今天才简单测试了下,果真是可以实现 ...