- 分享
20250525 老生算法复习
- @ 2025-5-25 8:00:56
每个人写出以下每个算法的通用模板代码:
邬宇皓
- 分解质因数模板:把一个数拆分成若干个质数的乘积(唯一分解定理)
- 进制转换:封装成函数,例如 f10tox(int n, int p) 是把10进制的n转成p进制; fxto10(string s, int p) 是把p进制的数字s转成10进制
- 图的直接存边法:带边权, 要写输入部分,输入数据格式自己定
- 图的邻接矩阵:同上
- 图的邻接表:同上
- 二维前缀和:1、预处理计算的部分 2、求任意矩形区域元素之和(封装成函数)
- 二维差分::1、预处理计算的部分 2、给任意矩形区域元素同时加上x(封装成函数)
- 图的DFS
- 图的BFS
李佳航
- 选择排序模板
- 常规DFS模板:全排列
- 分解质因数模板:把一个数拆分成若干个质数的乘积(唯一分解定理)
- 二分查找:输入数据自己模拟,要能找到具体下标
- 快速幂模板:封装成函数 fexp(int a, int p , int mod) , 计算a的p次方模mod
- 常规BFS模板
- 进制转换:封装成函数,例如 f10tox(int n, int p) 是把10进制的n转成p进制; fxto10(string s, int p) 是把p进制的数字s转成10进制
陈奕霖、吴译翔、苏宸熙
- 判断单个质数模板:封装成函数
- 常见枚举法模板:例如三个密码锁滚轮枚举所有情况
- 冒泡排序模板:
- 选择排序模板:
- 桶排序模板:
- 分解质因数模板:把一个数拆分成若干个质数的乘积(唯一分解定理)
- 常规DFS模板:全排列
- 一维前缀和:1、预处理计算的部分 2、求数组任意区间[l,r]元素之和(封装成函数)
- 一维差分::1、预处理计算的部分 2、给数组任意区间[l,r]的元素同时加上x(封装成函数)
25 条评论
-
13950188906 LV 8 @ 2025-10-8 10:58:14已修改
#include<bits/stdc++.h> using namespace std; int a=1,l=0,b=0; struct xuesheng{ string haoshu; string xingming; string xingbie; string nianling; }s[100005]; int main(){ while(a){ printf("%s\n","请选择操作方式 0:退出 1:输入数据 2:删除数据 3:查询数据 4:彩蛋"); scanf("%d",&a); if(a==0){ break; }else if(a==1){ l++; printf("%s\n","请输入学号"); scanf("%s",&s[l].haoshu); b=s[l].haoshu.size(); while(1){ if(b==11){ break; }else{ printf("%s\n","学号不是11位请重新输入"); printf("%s\n","请输入学号"); scanf("%s",&s[l].haoshu); b=s[l].haoshu.size(); } } printf("%s\n","请输入姓名"); scanf("%s",&s[l].xingming); printf("%s\n","请输入性别"); scanf("%s",&s[l].xingbie); printf("%s\n","请输入年级"); scanf("%s",&s[l].nianling); printf("%s\n","数据储存完毕"); }else if(a==2){ }else if(a==3){ }else if(a==4){ }else{ printf("%s\n","无可执行操作!!!"); } } return 0; } -
@ 2025-5-25 11:01:36
T8
#include<iostream> using namespace std; long long a[10000005],b,c,d; int main(){ cin>>b; for(int i=1; i<=b; i++) { cin>>a[i]; a[i]+=a[i-1]; } cin>>d; cin>>c; cout<<a[c]-a[d-1]; return 0; } -
@ 2025-5-25 10:51:13dfs全排列
//dfs全排列 #include<bits/stdc++.h> using namespace std; int a[100005],n; void dfs(int x){ if (x>n){ for(int i=0;i<n;i++){ cout<<a[i]<<" "; } cout<<endl; return; } for(int i=0;i<10;i++){ a[x]=i; dfs(x+1); } } int main(){ cin>>n; dfs(1); return 0; } -
@ 2025-5-25 10:50:31判断质数 订正!!!
//判断质数 #include <bits/stdc++.h> using namespace std; bool pd(int x){ if(x == 1 || x == 0) return 0; for(int i = 2;i*i<=x;i++){ if(x%i==0){ return 0; } }return 1; } int main(){ int n; cin>>n; if(pd(n)){ cout<<"Yes"; }else{ cout<<"No"; } return 0; }😄 1 -
@ 2025-5-25 10:39:42
T7:进制转换
#include<bits/stdc++.h> using namespace std; void f10tox(int n,int p){ vector<int> v; while (n>0){ v.push_back(n%p); n /= p; } reverse(v.begin(),v.end()); for (int i : v){ cout << i; } } int fxto10(string s,int p){ int su7 = 0; reverse(s.begin(),s.end()); for (int i = 0;i<s.size();i++){ su7 += (s[i]-'0')*pow(p,i); } cout << su7; } int main(){ cout << "f10tox" << endl; int f10toxn,f10toxp; cin >> f10toxn >> f10toxp; f10tox(f10toxn,f10toxp); cout << endl << "-------------------------------------" << endl << "fxto10" << endl; string fxto10s; int fxto10p; cin >> fxto10s >> fxto10p; fxto10(fxto10s,fxto10p); } -
@ 2025-5-25 10:37:33分解质因数
//分解质因数 #include<bits/stdc++.h> using namespace std; int n; int main(){ cin >> n; int i = 2; while (n !=1){ if (n % i ==0){ n/=i; cout << i << " "; } else{ i++; } } return 0; } -
@ 2025-5-25 10:28:42
T2
#include<iostream> #include<cstdio> using namespace std; bool d=true; long long a,b,c; int main(){ for(int a=0; a<=9; a++) { cout<<endl; for(int b=0; b<=9; b++) { cout<<endl; for(int c=0; c<=9; c++) { printf("%03d ",a*100+b*10+c); } } } return 0; } -
@ 2025-5-25 10:10:12
冒泡排序模板
//冒泡排序 #include<bits/stdc++.h> using namespace std; int a[10005],n; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=1;i<=n;i++){ for(int l=1;l<=n;l++){ if(a[l]<a[l-1]){ continue; }else if(a[l]==a[l-1]){ continue; }else{ swap(a[l],a[l-1]); } } } for(int i=n-1;i>=0;i--){ cout<<a[i]<<" "; } return 0; } -
@ 2025-5-25 10:08:19
T3
#include<iostream> using namespace std; bool d=true; long long a[10000005],b,c; int main(){ cin>>b; for(int i=1; i<=b; i++) { cin>>a[i]; } while(true) { for(int i=1; i<=b; i++) { if(a[i]<a[i-1]) { c=a[i]; a[i]=a[i-1]; a[i-1]=c; d=false; } } if(d==true) { for(int i=1; i<=b; i++) { cout<<a[i]<<" "; } break; } d=true; } return 0; } -
@ 2025-5-25 10:06:44
T1
#include<iostream> using namespace std; void panda(long long a){ long long b=1; for(int i=2; i<=a-1; i++) { if(a%i==0) { b=0; } } if(b==1) { cout<<"是质数"; } else { cout<<"不是质数"; } } int main(){ long long a; cin>>a; panda(a); return 0; } -
@ 2025-5-25 10:04:21
T6:BFS(迷宫最短步数)
输入格式
起始点x 起始点y 终点x 终点ycode:
#include<bits/stdc++.h> using namespace std; struct pos{ int n; int x; int y; }; queue<pos> q; int a,b,x,y; int rotatex[4] = {0,0,-1,1}; int rotatey[4] = {-1,1,0,0}; int main(){ cin >> a >> b >> x >> y; q.push({0,a,b}); while (!q.empty()){ pos f = q.front();q.pop(); if (f.x == x && f.y ==y){ cout << f.n; break; } for (int i = 0;i<4;i++){ q.push({f.n+1,f.x+rotatex[i],f.y+rotatey[i]}); } } } -
@ 2025-5-25 9:59:05
选择排序模板
//选择排序 #include<bits/stdc++.h> using namespace std; int a[10005],n; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=1;i<=n;i++){ int x=i; for(int l=i+1;l<=n;l++){ if(a[l]<a[x]){ x=l; } } if(x!=i){ swap(a[i],a[x]); } } for(int i=1;i<=n;i++){ cout<<a[i]<<" "; } return 0; } -
@ 2025-5-25 9:54:21选择排序
//选择排序 #include<bits/stdc++.h> using namespace std; int n; int a[100005]; int main(){ cin>>n; for(int i = 1;i<=n;i++){ cin>>a[i]; } for(int i = 1;i<=n;i++){ int sum = i; for(int j = i+1;j<=n;j++){ if(a[j]<a[sum]){ sum = j; } } if(sum != i){ swap(a[i],a[sum]); } } for(int i = 1;i<=n;i++){ cout<<a[i]<<" "; } return 0; }🌿 1😄 1 -
@ 2025-5-25 9:49:03
T5:快速幂
输入格式
a p modcode:
#include<bits/stdc++.h> #include<windows.h> using namespace std; int n,c,m; long long fexp(int a,int p ,int mod){ long long ans=1,b=a; while (p > 0){ if (p & 1) { ans *= b; ans %= mod; } b *= b; p = p >> 1; } return ans; } int main(){ cin >> n >> c >> m; cout << fexp(n,c,m); } -
@ 2025-5-25 9:40:05
桶排序模板
//桶排序 #include<bits/stdc++.h> using namespace std; int a[10005],x[10005],n; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=1;i<=10000;i++){ x[i]=0; } for(int i=1;i<=n;i++){ x[a[i]]++; } for(int i=1;i<=10000;i++){ if(x[i]!=0){ for(int l=1;l<=x[i];l++){ cout<<i<<" "; } } } return 0; }😄 1 -
@ 2025-5-25 9:40:00冒泡排序代码(输入,冒泡循环交换,输出)
//冒泡排序 #include<bits/stdc++.h> using namespace std; int n,a[1000005]; int main(){ cin>>n; for(int i = 1;i<=n;i++){ cin>>a[i]; } for(int i = 1;i<=n;i++){ for(int j = 1;j<=n-i;j++){ if(a[j]>a[j+1]){ int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for(int i = 1;i<=n;i++){ cout<<a[i]<<" "; } return 0; }😄 1 -
@ 2025-5-25 9:31:37密码锁(枚举)代码
//**密码锁(枚举)** #include<bits/stdc++.h> using namespace std; int a[100005]; int main(){ for(int i = 0;i<=9;i++){ for(int j = 0;j<=9;j++){ for(int k = 0;k<=9;k++){ cout<<i<<j<<k<<" "; } } } return 0; }😄 1 -
@ 2025-5-25 9:31:21
T4:二分查找(从1开始)
输入格式:
n num <array>code:
#include<bits/stdc++.h> using namespace std; int A[114514],n,num,mid,l,r; int main(){ cin >> n >> num; l=1; r=n; for (int i = 1;i<=n;i++) cin >> A[i]; sort(A+1,A+n+1); while (l<=r){ mid = (l+r)/2; if (A[mid] == num){ cout << mid; return 0; }else if(A[mid] < num ){ l = mid+1; }else{ r = mid-1; } } cout << -1; } // 3 3 // 1 2 3😄 1 -
@ 2025-5-25 9:31:21
枚举算法模板
//枚举算法 #include<bits/stdc++.h> using namespace std; int a[10005]; int main(){ for(int i=0;i<=9;i++){ for(int l=0;l<=9;l++){ for(int k=0;k<=9;k++){ cout<<i<<l<<k<<endl; } } } return 0; }😄 1 -
@ 2025-5-25 9:30:51判断质数模板(有函数 和主函数代码)
//判断质数 #include <bits/stdc++.h> using namespace std; bool pd(int x){ if(x == 1 || x == 0) return 0; for(int i = 2;i<x;i++){ if(x%i==0){ return 0; } }return 1; } int main(){ int n; cin>>n; if(pd(n)){ cout<<"Yes"; }else{ cout<<"No"; } return 0; } -
@ 2025-5-25 9:22:44
T3: 分解质因数
#include<bits/stdc++.h> using namespace std; int n; int main(){ cin >> n; for (int i = 2;i*i<n;i++){ while (n%i==0){ cout << i << " "; n/=i; } } if (n!=0) cout << n; } -
@ 2025-5-25 9:20:22
判断质数模板
//判断质数 #include <bits/stdc++.h> using namespace std; int n,m; bool pdzs(int x){ if(x<2)return 0; for(int i=2;i<x;i++){ if(x%i==0){ return 0; } } return 1; } int main(){ scanf("%d",&n); m=pdzs(n); if(m==1)cout<<"质数"; else cout<<"不是质数"; return 0; } -
@ 2025-5-25 9:20:19
T2:全排列
#include<bits/stdc++.h> using namespace std; int A[1145],n; bool mark[114514]; void dfs(int c){ if (c>n){ for (int i = 1;i<=n;i++){ cout << A[i] << " "; } cout << endl; return; } for (int i = 1;i<=n;i++){ if (mark[i]) continue; mark[i]=true; A[c] = i; dfs(c+1); mark[i]=false; } } int main(){ cin >> n; dfs(1); }😄 2👀 1🤔 1 -
@ 2025-5-25 9:15:04
T1: 选择排序模板
输入格式:
6 1 1 4 5 1 41 1 1 4 4 5code:
#include<bits/stdc++.h> using namespace std; int n,A[114514]; int main(){ cin >> n; for (int i = 0;i<n;i++) cin >> A[i]; for (int i = 0;i<n;i++){ int minidx = i; for (int j = i+1;j<n;j++){ if (A[j]<A[minidx]){ minidx = j; } } swap(A[i],A[minidx]); } for (int i = 0;i<n;i++) cout << A[i] << " "; } -
@ 2025-5-25 8:10:13
回复用模板:
## 冒泡排序 ```cpp #include <iostream> using namespace std; int main(){ return 0; } ```效果如下:
冒泡排序
#include <iostream> using namespace std; int main(){ return 0; }
- 1