当前位置: 首页 > news >正文

自定义函数库

求两点距离

double dis(double x1, double y1, double x2, double y2){return sqrt(pow(x2-x1, 2)+pow(y2-y1, 2));
}

判断闰年

bool isLeapYear(int year){return year%4==0 && year%100!=0 || year%400==0;
}

判断素数

bool isPrime(int num){if(num<2) return false;for(int i=2; i*i<=num; i++){if(num%i == 0) return false; }return true;
} 

埃氏筛素数

const int N=1e5+1;
bool is_prime[N];
void func(){memset(is_prime, true, sizeof(is_prime));is_prime[0]=is_prime[1]=false;for(int i=2; i*i<=N; i++){if(is_prime[i]){for(int j=i*i; j<=N; j=j+i){is_prime[j]=false;}}}
}

冒泡排序

const int N=101;
int n, arr[N];
void bubbleSort() {for(int i=0; i<n-1; i++) {//比较趟数 bool flag = 1;for(int j=0; j<n-i-1; j++) { if(arr[j] > arr[j+1]) {swap(arr[j], arr[j+1]);flag = 0;}}if(flag) break;}
}

插入排序

const int N=101;
int n, arr[N];
void insertSort() {for(int i=1; i<n; i++) {//arr[i]当前需要插入的元素int base=arr[i], j; for(j=i-1; j>=0; j--) {if(arr[j]>base) {arr[j+1]=arr[j];}else break;}arr[j+1]=base;}
}

选择排序

const int N=101;
int n, arr[N];
void selectSort() {for(int i=0; i<n-1; i++) {//i:当次排序元素应该在的位置 int minIndex=i;for(int j=i+1; j<n; j++) {if(arr[j] < arr[minIndex]) {minIndex = j;}}swap(arr[minIndex], arr[i]);}
}

归并排序

const int N=101;
int n, arr[N], tmp[N];
void mergeSort(int left, int right){int mid=(left+right)/2;if(left<mid) partition(left, mid);if(mid+1<right) partition(mid+1, right);int i=left, j=mid+1, t=0;while(i<=mid && j<=right){if(arr[i] < arr[j]) tmp[t++] = arr[i++];else tmp[t++] = arr[j++];}while(i<=mid) tmp[t++] = arr[i++];while(j<=right) tmp[t++] = arr[j++];for(int i=0; i<t; i++) arr[i+left] = tmp[i];
}

快速排序

const int N=101;
int n, arr[N];
void quickSort(int left, int right){int num = arr[left], i=left, j=right;while(i<j){while(i<j && arr[j]>=num)  j--;arr[i]=arr[j];while(i<j && arr[i]<=num)i++;arr[j]=arr[i];}arr[i]=num;if(left<i-1) quickSort(left, i-1);if(i+1<right) quickSort(i+1, right); 
}

排列-n个数中抽m个进行全排列

const int N=10;
int n, m, arr[N], box[N]; 
bool vis[N];
void dfs(int pos){if(pos==m){for(int i=0; i<m; i++) cout<<box[i]<<" ";cout<<endl;return;}for(int i=0; i<n; i++){if(!vis[i]){vis[i]=true;box[pos]=arr[i];dfs(pos+1);vis[i]=false;}}
}

组合-n个数中抽m个进行组合

const int N=10;
int n, m, arr[N], box[N]; 
bool vis[N];
void dfs(int idx, int pos){if(pos==m){for(int i=0; i<m; i++) cout<<box[i]<<" ";cout<<endl;return;}for(int i=idx; i<n; i++){if(!vis[i]){vis[i]=true;box[pos]=arr[i];dfs(i+1, pos+1);vis[i]=false;}}
}

高精度数加法

string add(string a, string b) {int lena=a.length(), lenb=b.length(), a1[1005]= {}, b1[1005]= {};for(int i=0; i<lena; i++) a1[lena-1-i] = a[i]-'0';for(int i=0; i<lenb; i++) b1[lenb-1-i] = b[i]-'0';int lenc=lena>lenb?lena:lenb, c1[1005]= {}, carry=0;for(int i=0; i<lenc; i++) {c1[i]=a1[i]+b1[i]+carry;carry=c1[i]/10;c1[i]%=10;}if(carry>0) c1[lenc++]=carry;string res="";for(int i=lenc-1; i>=0; i--) res += c1[i]+'0';return res;
}

高精度数减法

string sub(string a, string b) {bool f=true; //标记a和b的大小关系,默认a大 int lena=a.length(), lenb=b.length();if(lena<lenb || lena==lenb && a<b){f=false;swap(a, b);swap(lena, lenb);} int a1[1005]= {}, b1[1005]= {};for(int i=0; i<lena; i++) a1[lena-1-i] = a[i]-'0';for(int i=0; i<lenb; i++) b1[lenb-1-i] = b[i]-'0';int c1[1005]= {}, lenc=lena;for(int i=0; i<lenc; i++) {if(a1[i]<b1[i]){a1[i+1]--;a1[i]+=10;} c1[i]=a1[i]-b1[i];}while(lenc>1 && c1[lenc-1]==0) lenc--; string res="";if(f==false) res+='-';for(int i=lenc-1; i>=0; i--) res += c1[i]+'0';return res;
}

高精度数乘法,大数乘大数

string mul1(string a, string b) {int lena=a.length(), lenb=b.length(), a1[1005]= {}, b1[1005]= {};for(int i=0; i<lena; i++) a1[lena-1-i] = a[i]-'0';for(int i=0; i<lenb; i++) b1[lenb-1-i] = b[i]-'0';int lenc=lena+lenb, c1[2005]= {}, carry;for(int i=0; i<lenb; i++) {carry=0;for(int j=0; j<lena; j++) {c1[i+j]+=a1[j]*b1[i]+carry;carry = c1[i+j]/10;c1[i+j]%=10;}c1[i+lena]=carry;}while(lenc>1 && c1[lenc-1]==0) lenc--;//保存运算结果string res="";for(int i=lenc-1; i>=0; i--) res += c1[i]+'0';return res;
}

高精度数乘法,大数乘小数

string mul2(string a, int b){int lena=a.length(), a1[1005]={};for(int i=0; i<lena; i++) a1[lena-1-i]=a[i]-'0';int lenc=lena, c1[2005]={}, carry=0;for(int i=0; i<lenc; i++){c1[i] = a1[i]*b+carry;carry = c1[i]/10;c1[i] %= 10;}while(carry){c1[lenc++]=carry%10;carry/=10;}string res="";for(int i=lenc-1; i>=0; i--) res+=c1[i]+'0';return res;
}
http://www.lryc.cn/news/503278.html

相关文章:

  • FreeRTOS例程2-任务挂起恢复与使用中断遇到的坑!
  • L23.【LeetCode笔记】验证回文串(剖析几种解法)
  • FPGA 17 ,FPGA 与 SR-IOV虚拟化技术,高性能计算与虚拟化技术的结合(FPGA 与 SR-IOV 和 PCI,高性能计算与虚拟化的完美融合)
  • 解决navicat 导出excel数字为科学计数法问题
  • [Unity] AppLovin Max接入Native 广告 Android篇
  • Source Insight 4.0的安装
  • 远程调试软件对比与使用推荐
  • 鸿蒙项目云捐助第二讲鸿蒙图文互动基本程序实现
  • 求解球面的一组正交标架
  • php.ini 文件上传/执行时间/部分配置新手教程
  • 【Leetcode Top 100】102. 二叉树的层序遍历
  • 【C++笔记】AVL树
  • 【竞技宝】LOL:JDG官宣yagao离队
  • 双目摄像头标定方法
  • 相差不超过k的最多数,最长公共子序列(一),排序子序列,体操队形,青蛙过河
  • 【自然语言处理与大模型】使用llama.cpp将HF格式大模型转换为GGUF格式
  • MongoDB存储照片和文件存储照片的区别在那里?
  • 协变量的概念
  • 【[LeetCode每日一题】Leetcode 1768.交替合并字符串
  • SRT协议学习
  • 南昌大学《2024年837自动控制原理真题》 (完整版)
  • ASP.NET Core 应用程序的启动与配置:Program.cs 文件的全面解析
  • 2020-12-02 数字过滤
  • 长短期记忆神经网络(LSTM)介绍
  • 数据结构 ——二叉树转广义表
  • chattts生成的音频与字幕修改完善,每段字幕对应不同颜色的视频,准备下一步插入视频。
  • 数据结构开始——时间复杂度和空间复杂度知识点笔记总结
  • 路由策略与策略路由
  • pytorch_fid 安装笔记
  • Qt绘制仪表————附带详细说明和代码示例