当前位置: 首页 > news >正文

C/C++蓝桥杯算法真题打卡(Day8)

一、P8780 [蓝桥杯 2022 省 B] 刷题统计 - 洛谷

算法代码:

#include<bits/stdc++.h>  // 包含标准库中的所有头文件,方便使用各种数据结构和算法
using namespace std;     // 使用标准命名空间,避免每次调用标准库函数时都要加 std::

int main() {
    long long a, b, n;   // 定义长整型变量 a, b, n,分别表示工作日每天的题目数量、周末每天的题目数量和目标题目数量
    cin >> a >> b >> n;  // 从标准输入读取 a, b, n 的值

    long long week = 5 * a + 2 * b; // 计算一周内(5个工作日和2个周末)小明总共能完成的题目数量
    long long fullWeeks = n / week; // 计算完成目标题目数量 n 需要多少个完整的周
    long long remaining = n % week; // 计算完成完整周数后,剩余的题目数量
    long long days = fullWeeks * 7; // 计算完整周数对应的天数(一周7天)

    if (remaining > 0) { // 如果剩余的题目数量大于0,则需要额外计算完成这些题目所需的天数
        for (int i = 1; i <= 7; ++i) { // 遍历一周的7天(周一到周日)
            if (i <= 5) {              // 如果是周一到周五(前5天)
                remaining -= a;        // 减去工作日每天完成的题目数量 a
            } else {                   // 如果是周六或周日(后2天)
                remaining -= b;        // 减去周末每天完成的题目数量 b
            }
            days++;                     // 每过一天,总天数加1
            if (remaining <= 0) {       // 如果剩余的题目数量小于等于0,说明题目已经完成
                break;                 // 跳出循环
            }
        }
    }

    cout << days << endl; // 输出总天数
    return 0;             // 程序正常结束
}

代码逻辑总结:

  1. 输入处理:读取小明每天完成的题目数量 a 和 b,以及目标题目数量 n。

  2. 周计算:计算一周内小明能完成的题目总数,并计算需要多少个完整的周才能完成 n题。

  3. 剩余题目处理:计算完成完整周数后剩余的题目数量,并逐天计算完成这些剩余题目所需的天数。

  4. 输出结果:输出完成 n 题所需的总天数。

二、P8795 [蓝桥杯 2022 国 A] 选素数 - 洛谷 

题解:(还是看大佬的思路代码吧,我的水平接触不到国赛,但还是可以学习一下的)

#include<bits/stdc++.h>  // 包含标准库中的所有头文件,方便使用各种数据结构和算法
#define ri register int  // 定义宏 ri,表示寄存器变量 int,用于优化性能
#define maxn 1000005     // 定义宏 maxn,表示数组的最大大小为 1000005
#define inf 0xffffff     // 定义宏 inf,表示一个较大的值(0xffffff)
using namespace std;     // 使用标准命名空间,避免每次调用标准库函数时都要加 std::

// 快速读入函数,用于从标准输入读取一个整数
inline int read(){
    int x=0,f=1;         // x 用于存储结果,f 用于存储符号(正负)
    char ch=getchar();   // 读取一个字符
    while(ch<'0'||ch>'9'){ // 如果字符不是数字
        if(ch=='-')      // 如果是负号
            f=-1;        // 设置 f 为 -1
        ch=getchar();   // 继续读取下一个字符
    }
    while(ch>='0'&&ch<='9'){ // 如果字符是数字
        x=x*10+ch-48;    // 将字符转换为数字并累加到 x
        ch=getchar();    // 继续读取下一个字符
    }
    return x*f;         // 返回结果(考虑符号)
}

// 快速输出函数,用于将一个整数输出到标准输出
inline void write(int n){
    if(n<0){            // 如果 n 是负数
        putchar('-');   // 输出负号
        n=-n;           // 取绝对值
    }
    if(n>9)             // 如果 n 是多位数
        write(n/10);    // 递归输出高位
    putchar(n%10+'0');  // 输出最低位
}

int n;                  // 定义全局变量 n,表示输入的上限
int np[maxn];           // 定义数组 np,用于存储每个数的最小质因数
vector<int>pri;         // 定义向量 pri,用于存储质数

// 初始化函数,用于生成质数并计算每个数的最小质因数
void init(){
    for(ri i=2;i<=n;i++){ // 遍历从 2 到 n 的所有数
        if(!np[i]){      // 如果 i 是质数
            pri.push_back(i); // 将 i 加入质数向量
            np[i]=i;     // 设置 i 的最小质因数为 i
        }
        for(auto j:pri){ // 遍历所有质数
            if(i*j>n)break; // 如果 i*j 超过 n,跳出循环
            np[i*j]=max(max(np[i*j],j),np[i]); // 更新 i*j 的最小质因数
            if(!(i%j))break; // 如果 j 是 i 的质因数,跳出循环
        }
    }
}

// zy 数组,用于存储某个计算结果
int zy[maxn];

// 主函数
signed main(){
    n=read();           // 读取输入的 n
    init();             // 调用初始化函数
    for(ri i=2;i<=n;i++){ // 遍历从 2 到 n 的所有数
        if(np[i]^i)     // 如果 i 不是质数
            zy[i]=i-np[i]+1; // 计算 zy[i] 的值
        else zy[i]=i;   // 如果 i 是质数,zy[i] 等于 i
    }
    int mini=inf;       // 定义变量 mini,用于存储最小值,初始值为 inf
    if(np[n]==n||!np[n]) // 如果 n 是质数或 np[n] 为 0
        write(-1);      // 输出 -1
    else{
        for(ri i=n-np[n]+1;i<=n;i++) // 遍历从 n-np[n]+1 到 n 的所有数
            if(np[i]!=i)mini=min(mini,zy[i]); // 更新 mini
        write(mini);    // 输出 mini
    }
    return 0;           // 程序正常结束
}

相关文章:

  • 虚幻基础:组件组件通信
  • 一次http请求需要经过哪些步骤?
  • 【GPT入门】第26课 掌握langchain LCEL 链式调用的三种方法
  • Qt msvc程序运行
  • Vue3组合式函数(刷新率 useFps)
  • 搞定python之九----常用内置模块
  • linux环境下快速输出电脑的系统/硬件/显卡/网络/已安装软件等信息
  • AT指令集-NBIOT
  • 【Linux】深度解析Linux进程管理:从进程PCB到创建子进程的全景指南
  • 常见的前端安全问题
  • 探索HTML5 Canvas:创造动态与交互性网页内容的强大工具
  • vim在连续多行行首插入相同的字符
  • 3.18学习总结java
  • 2025/3.17 郭院安排会议与南京银行参访
  • JMeter基本介绍
  • SpringCloud 学习笔记3(OpenFeign)
  • springboot实现调用百度ocr实现身份识别
  • 【实习经历Two:参与开源项目,学习并应用Git】
  • Ubuntu togo系统读写性能与原生系统测试
  • 【leetcode hot 100 124】二叉树中的最大路径和
  • 山西太原小区爆炸事故已造成17人受伤
  • 美参议院通过新任美国驻华大使任命,外交部回应
  • 农业农村部:把住能繁母猪存栏量“总开关”,引导养殖场户优化母猪存栏结构、合理控制产能
  • 习近平在上海考察时强调,加快建成具有全球影响力的科技创新高地
  • 书业观察|一本书的颜值革命:从毛边皮面到爆火的刷边书
  • 一周人物|卡鲁等入围英国特纳奖,李学明新展中国美术馆