蓝桥杯知识点总结C++

蓝桥杯知识点总结C++,第1张

目录

1、暴力、枚举

2、日期问题

①判断闰年

②判断日期是否合理

③借助excel计算 

3、数的处理

①素筛

1、简单素筛:

2、埃氏筛

②最大公约数(欧几里得)

1、单个数:

2、多个数:

③最小公倍数

1、单个数:

2、多个数:

④二分

4、dp——01背包

5、搜索

①dfs

6、C++里常用函数

①排序函数sort函数

②初始化函数memset

③数学函数

7、string


1、暴力、枚举

一般是多重循环、注意边界和出口

2、日期问题
①判断闰年
int check(int x)
{    
    if(x%400==0||(x%4==0&&x%100!=0)
    return 1;
    return 0;
}
②判断日期是否合理
int check(int year,int month,int day)
{
    int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    if(year%4==0&&year%100!=0||year%400==0)//闰年判断
        a[2]+=1;
    if(month<1||month>12)//判断月份是否出界 
        return 0;
    int t=a[month];
    if(day<1||day>t)
        return 0;
    return 1;
}
③借助excel计算 
3、数的处理
①素筛 1、简单素筛:
int prime(int n)
{
    if(n==1)
    return 0;
    for(int i=2;i*i
2、埃氏筛

思想:从2开始,将每个质数的倍数都标记成合数

int a[MAXN];
void prime()
{
    memset(a,1,sizeof(a);  //初始化为都是素数 
    a[0]=a[1]=0;//0和1不是素数 
    for(int i=2;i<=MAXN;i++)
    {
        if(a[i])
        {
            for(int j=i*i;j
②最大公约数(欧几里得)
因为a / b = k(余r)
所以 a可以表示成a = kb + r(a,b,k,r皆为正整数,且r


进而a%d == 0. 因此d也是a,b的公约数因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等

1、单个数:
int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}
2、多个数:
int gcds(int a[],int n)
{
    int g=a[0];
    for(int i=1;i
③最小公倍数

两个数的最小公倍数等于他俩乘积除以最大公约数(a*b/gcd(a,b))

1、单个数:
int lcm(int a,int b)
{
    return a*b/gcd(a,b);
}
2、多个数:
int lcms(int a[],int n)
{
    int l=a[0];
    for(int i=1;i
④二分
int i=0,j=100001;//所给范围 
while(i<=j)
{
    int mid=(i+j)/2;//二分法将mid看作边长 
    if(check(mid))//假如已经符合就继续往上查找 
        i=mid+1;//找到符合题意的最大边长 
    else 
        j=mid-1;//往下查找 
}
4、dp——01背包

已知条件

①有N个物品,有一个背包。


背包的容量是V。


②对于每个物品有:体积,价值

③每个物品只能使用一次


需要满足两个条件


①选择的这i个物品总体积不超过V
②这些物品的价值加起来最大
③对于某一个物品:使用/不使用

分析:

如果不拿就有j空间分给i-1个物品

如果拿了就只要j-c[i]的空间分给i-1个物品,c[i]的空间分给第i个物品

给i-1个物品分配j-c[i]空间和分配j空间带来的总价值是不一样的

#include//万能头文件
#define ll long long
using namespace std;
const ll maxn=100;
ll n,v,f[maxn][maxn];
ll c[maxn];//每个物品占用空间
ll w[maxn];//每个物品的价值
int main()
{
    cin>>n>>v;
    for(ll i=1;i<=n;i++)
        scanf("%lld",&c[i]);
    for(ll i=1;i<=n;i++)
        scanf("%lld",&w[i]);
    for(ll i=1;i<=n;i++)//第i个物品
        for(ll j=v;j>=0;j--)//剩余空间j
        { 
           if(j >= c[i])//如果装得下 
                   f[i][j]=max( f[i-1][j-c[i]]+w[i],f[i-1][j]);
            else//如果装不下
                f[i][j]=f[i-1][j];
        }
    cout<
5、搜索
①dfs
void dfs(int x,int y)
{
    if(x==fx&&y==fy)//出口
    {
    sum++;return ; 
    }
    for(int i=0;i<4;i++)
    {
        int nx=x+s[i][0];
        int ny=y+s[i][1];
        if(nx<1||nx>n||ny<1||ny>m||mp[nx][xy]==1||vis[nx][ny]==1)
            continue;//边界条件以及是否有障碍或已走过 
        vis[nx][ny]=1;//标记走过 
        dfs(nx,ny);//递归 
        vis[nx][ny]=0//回溯 
    }
} 
6、C++里常用函数
①排序函数sort函数

sort(a,a+num)

②初始化函数memset

memset(a,0,sizeof (a));

③数学函数

1.、abs——求整数的绝对值  

2、 pow——求x的次幂

3、sqrt——计算平方根

7、string

string类的常用方法_turbo夏日漱石的博客-CSDN博客

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/568282.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-09
下一篇2022-04-09

发表评论

登录后才能评论

评论列表(0条)