蓝桥杯 Day 5 (C++)

Dream-Y.ocean 先躺在说
C/C++领域潜力新星
2023-03-08 15:23:03

数的分解

#include <iostream>

using namespace std;

bool check(int x)
{
    while(x)
    {
        int tmp = x % 10;

        if(tmp == 2 || tmp == 4)
        {
            return false;
        }

        x /= 10;
    }
    return true;
}

int main()
{
    int ans = 0;

    // 正整数不包括 0
    for(int i = 1; i < 2019; i++)
    {
        if(check(i))
        {
            for(int j = i + 1; j < 2019; j++)
            {
                if(check(j))
                {
                    for(int k = j + 1; k < 2019; k++)
                    {
                        if(check(k) && i + j + k == 2019)
                        {
                            ans ++;
                        }
                    }
                }
            }
        }
    }

    cout << ans << endl;

    return 0;
}

img

猜生日

#include <iostream>

using namespace std;

int year = 2012;
int month = 3;
int day = 12;

int main()
{
    for(int i = 2012; ;i--)
    {
        int num = i * 10000 + 600;

        for(int j = 1; j <= 30; j++)
        {
            int tmp = num;

            tmp += j;

            if(tmp % year == 0 && tmp % month == 0 && tmp % day == 0)
            {
                cout << tmp << endl;
                return 0;
            }
        }
    }

    return 0;
}

img

成绩统计

#include <iostream>

using namespace std;

int n;

int main()
{
    cin >> n;

    int tmp = n;

    int num1 = 0, num2 = 0;

    while(tmp --)
    {
        int x;

        cin >> x;

        if(x >= 60)
        {
            num1 ++;

            if(x >= 85)
            {
                num2 ++;
            }
        }
    }

    cout << (int)((num1 * 100.0 / n) + 0.5) << "%" << endl;
    cout << (int)((num2 * 100.0 / n) + 0.5) << "%" << endl;

    return 0;
}

img

最大和

#include <iostream>
#include <cstring>

using namespace std;

// 思路:线性DP
// f(i)
// 表示: 达到 i点时 能达到最大的分值
// 属性: 达到 i点时 能达到最大的分值
// 状态转移方程: f[j] = max(f[j] ,f[i] + v[i]) 即 表示 从上一次得落脚点 到 可以一次性到达的点中,选取可获价值最高的落脚点 

const int N = 1e4 + 10, INF = 0x3f3f3f;

int n;

int v[N];
int f[N];

int getMinPrimes(int x)
{
    if(x == 1) return 1;

    for(int i = 2; i <= x / i; i++)
    {
        if(x % i == 0)
        {
            return i;
        }
    }
}


int main()
{
    cin >> n;

    for(int i = 1; i <= n; i++)
    {
        cin >> v[i];
    }

    // 全部填充最小值,因为题目中的得分可以是负数,防止负数得分下不走的情况
    // 【即防止因为价值已经是负数 而导致 max一直为0】
    memset(f, -INF, sizeof(f));

    f[1] = v[1];

    for(int i = 1; i <= n; i++)
    {
        int end = min(n, i + getMinPrimes(n - i)); //如果 i + 最小质因子 > n,表示当前可以走完剩下整个数组

        for(int j = i + 1; j <= end; j++)
        {
            //即 表示 从上一次得落脚点 到 可以一次性到达的点中,选取可获价值最高的落脚点 

            f[j] = max(f[j], f[i] + v[j]); 
        }
    }

    cout << f[n] << endl;

    return 0;
}

img

...全文
14 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,781

社区成员

发帖
与我相关
我的任务
社区描述
和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

 刷题!

试试用AI创作助手写篇文章吧