本文最后更新于:2025年11月3日 下午
                  
                
              
            
            
              
                
                A. 三角形面积 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include  <bits/stdc++.h>   using namespace std ;int  main ()  {     double  a,b,c;     double  ans,p,tmp;     cin >>a>>b>>c;     p=(a+b+c)*0.5 ;     tmp=p*(p-a)*(p-b)*(p-c);     ans=sqrt (tmp);     printf ("%.1lf" , ans);     return  0 ; }
 
 
B. 最大质因子 
唯一分解定理 
唯一分解定理又称为算数基本定理,基本内容是:
每个大于1的自然数,要么本身就是质数,要么可以写为2个或以上的质数的积,而且这些质因子按大小排列之后,写法仅有一种方式。
用另一种方法表示就是:
对于任何一个大于1的正整数,都存在一个标准的分解式: N=p1^a1 * p2^a2··· pn^an;(其中一系列an为指数,pn为质数)
此定理表明:任何一个大于 1 的正整数都可以表示为素数的积。
 
然而这道题纯暴力就可解…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include  <bits/stdc++.h>   using namespace std ;const  int  maxn=1e5 +10 ;bool  judge (int  a)  {     int  flag=1 ;     for  (int  i=2 ;i*2 <=a;i++)      if  (a%i==0 ) {flag=0 ; break ; }     if  (a==1 ) return  0 ;      else  return  flag; }int  main ()  {     int  a;    while (cin >>a)    {        for  (int  i=a;i>=1 ;i--)        {            if  (a%i==0 )             if  (judge(i))            {                cout <<i<<endl ;                break ;            }        }    }     return  0 ; }
 
C.杨辉三角 模板例题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <bits/stdc++.h>   using namespace std ;int  a[21 ][21 ];int  main ()  { 	memset (a, 0 , sizeof (a)); 	a[1 ][1 ]=1 ; 	a[2 ][1 ]=a[2 ][2 ]=1 ; 	int  n; 	cin >>n; 	for (int  i=3 ;i<=n;i++) 	{ 		for (int  j=1 ;j<=i;j++) 		{ 			if (j==1  || j==i)	 			{ 				a[i][j]=1 ;continue ; 			} 			a[i][j]=a[i-1 ][j-1 ]+a[i-1 ][j]; 		} 	} 	for (int  i=1 ;i<=n;i++) 	{ 		for (int  j=1 ;j<=i;j++) 		{ 			cout <<a[i][j]<<" " ; 		} 		cout <<endl ; 	} 	return  0 ; }
 
D.”nefu”的数目 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #include <iostream>  #include <cstdio>  #include <cstring>   using namespace std ;string  s;int  scount (int  p)  { 	int  sum=0 ; 	int  len=s.length(); 	for (int  i=p+1 ;i<len;i++) 	{ 		if (s[i]=='e' ) 		{ 			for (int  j=i+1 ;j<len;j++) 			{ 				if (s[j]=='f' ) 				{ 					for (int  k=j+1 ;k<len;k++) 					{ 						if (s[k]=='u' )	sum++; 						 					} 				} 			} 		} 	} 	return  sum; }int  main ()  { 	int  ans=0 ,flag=0 ; 	cin >>s; 	int  len=s.length(); 	 	for (int  i=0 ;i<len;i++) 	{ 		if (s[i]=='n' ) 		{ 		    ans+=scount(i); 		}              	} 	cout <<ans<<endl ; 	return  0 ; }
 
E. 最少修改次数(1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include  <bits/stdc++.h>   using namespace std ;const  int  maxn=2e5 +10 ;int  main ()  {  string  s,t;    while (cin >>s)    {        cin >>t;        int  ct=0 ;        int  nums=s.size(),numt=t.size();        int  min=1111 ;        for  (int  i=0 ;i<=nums-numt;i++)        {            int  j=0 ;            ct=0 ;            for  (int  k=i;k<=i+numt-1 ;k++)             {                 if  (s[k]!=t[j]) ct++;                 j++;             }             if  (ct<min) min=ct;        }        cout <<min<<endl ;    }     return  0 ; }
 
F.字典序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include  <bits/stdc++.h>   using namespace std ;const  int  maxn=2e5 +10 ;int  main ()  { 	int  n;   while (cin >>n)   {      string  s1,s,max="0" ;     for  (int  i=1 ;i<=n;i++)      {        int  m=i;        s.clear();	s1.clear();        while (m!=0 )         {          s+=m%8 +'0' ;          m/=8 ;         }        for  (int  j=s.size()-1 ;j>=0 ;j--)        {        	    s1+=s[j]; 	   }         if  (s1>max) max=s1;      }     cout <<max<<endl ;   } 	return  0 ; }
 
G.最小差值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <bits/stdc++.h>   using namespace std ;const  int  maxn=2e5 +10 ;int  a[maxn];int  main ()  { 	int  n,tot=0 ; 	cin >>n; 	for (int  i=0 ;i<n;i++) 	{ 		cin >>a[i]; 		tot+=a[i]; 	} 	long  long  sum=0 ,ans=999999 ; 	for (int  i=0 ;i<n;i++) 	{ 		long  long  com; 		sum+=a[i]; 		com=tot-sum; 		ans=min(ans, abs (com-sum)); 	} 	cout <<ans; 	return  0 ; }
 
H.染色方案(待补) I.最大正方形 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <iostream>  #include <algorithm>   using namespace std ;int  main ()  { 	int  a[1000 +5 ]; 	int  n; 	cin >>n; 	for (int  i=1 ;i<=n;i++) 	{ 		cin >>a[i]; 	} 	sort(a+1 , a+1 +n); 	int  ans=0 ; 	for (int  i=n;i>=1 ;i--) 	{ 		if (a[i]>=ans+1 ) 		{ 			ans++; 		} 		else 	break ; 	} 	cout <<ans; 	return  0 ; }
 
J.最大值 注意:此题用C++输入输出会超时 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #include <iostream>  #include <cstdio>   using namespace std ;const  int  MAXN=2e5 +10 ;int  a[MAXN];int  times=0 ;int  main ()  { 	int  n; 	while (cin >>n) 	{ 		int  maxn=0 ,next=0 ; 		for (int  i=0 ;i<n;i++) 		{ 			scanf ("%d" , &a[i]); 			maxn=max(maxn, a[i]);	 		} 		for (int  i=0 ;i<n;i++) 		{ 			if (a[i]==maxn) 			{ 				times++; 				continue ; 			} 			next=max(next, a[i]); 		} 		for (int  i=0 ;i<n;i++) 		{ 			if (a[i]>=maxn && times<=1 ) 			{ 				printf ("%d\n" , next); 			} 			else  			{ 				printf ("%d\n" , maxn); 			} 		} 	} 	return  0 ; }
 
K.循环排列(待补) L.库特与围棋(待补)