每个人写出以下每个算法的通用模板代码:

邬宇皓

  • 分解质因数模板:把一个数拆分成若干个质数的乘积(唯一分解定理)
  • 进制转换:封装成函数,例如 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 条评论

  • @ 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-6-6 22:17:13

        逻辑没错,但是一般前缀和数组和输入数据的数组要分开,不然你这样写,输入数据就被覆盖了

    • @ 2025-5-25 10:51:13

      dfs全排列

      //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-6-6 22:18:22

          对的。其实回复是可以编辑的,把之前旧的回复改掉就行

      • @ 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 终点y
                    

                    code:

                    #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 mod
                        

                        code:

                        #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-6-6 22:13:51

                          b *= b 也有可能溢出,要mod

                      • @ 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-6-6 22:05:50

                          22 循环到 x1x-1 进行判断,有大量判断是多余的。只需要循环到 x\sqrt{x} 就行,能节省大量的时间

                      • @ 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-6-6 22:03:14

                          明显有BUG,n 一直做除法,最后不可能为 00

                      • @ 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-6-6 22:04:30

                          22 循环到 x1x-1 进行判断,有大量判断是多余的。只需要循环到 x\sqrt{x} 就行,能节省大量的时间

                      • @ 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 4
                        
                        1 1 1 4 4 5
                        

                        code:

                        #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