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

第五次CCF-CSP认证(含C++源码)

第五次CCF-CSP认证

  • 第一道(easy)
    • 思路及AC代码
  • 第二道(easy)
    • 思路及AC代码
      • solution 1
      • solution 2
  • 第三道(mid)
    • 思路及AC代码(mid)

第一道(easy)

在这里插入图片描述
题目链接

思路及AC代码

基本思路:
比如随便给一个数列:1 2 3 4 4 6 6 6
很明显输出的是5 我们在数有几段的时候有两种情况我们会加1
1.前面没有数字的时候,也就是第一段
2.前面数字和后面数字不一样的时候
如果我们用一次遍历就能输出正确答案,我们就需要做到以上两点,第二点很好搞,我们怎么处理第一段,如果我们不管他 在某些情况之下就会少输出一段,我觉得那干脆就一开始就默认有一段不就好了吗,具体到代码中就是让我们的count初始化为1,然后从数组第二位开始遍历就好了,这样就不用搞什么乱七八糟的东西,本身就是一道很简单的题目不是吗

#include <bits/stdc++.h>
using namespace std;
const int N =1010;
int n;
int s[N];
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>s[i];
    }
    int count=1;
    for(int j=1;j<n;j++)
    {
        if(s[j]!=s[j-1])
        {
            count++;
        }
    }
    cout<<count<<endl;
}

第二道(easy)

在这里插入图片描述
题目链接

思路及AC代码

有了昨天的帖子铺垫,这道是不是有些过于轻松写意了O(∩_∩)O哈哈~
这个帖子的第三题 如果忘了可以温一温
我觉得区别就是昨天那题需要我们通过getdate函数枚举出具体日期,不论是控制输入输出以及细节处理要求都比较高一些,这题是直接给你个年数天数,问你某年的第x天是几月几号,这样我们就暴力一下就可以,直到刚刚好枚举到第x天为止

solution 1

#include <bits/stdc++.h>
using namespace std;
int is_leapyear(int year)
{
    if(year%4==0 && year%100 ||year%400==0)
    {
        return 1;
    }else{
        return 0;
    }
}
// 获取每个月的天数
int daysInMonth(int year, int month) {
    int days[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (month == 2 ) {
        return days[2]+is_leapyear(year);
    }
    return days[month];
}
int main()
{
    int year,days;
    cin>>year>>days;
    for(int i=1;i<=12;i++)
    {
        for(int j=1;j<=daysInMonth(year,i);j++)
        {
            if(--days ==0)
            {
                printf("%d\n%d\n",i,j);
                return 0;
            }
            
        }
    }
    return 0;
}
                      

solution 2

我在题解里看到了比较简洁的代码粘过来了,其实思路是一样的 只不过更直接了

#include<bits/stdc++.h>
using namespace std;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
    int y,d;
    cin>>y>>d;
    if(y%4==0&&y%100!=0||y%400==0)a[2]=29;else a[2]=28;
    int x=0;
    while(d>0){
        if(d-a[x]<=0)break;
        else{
            d-=a[x];
            x++;
        }
    }
    cout<<x<<'\n'<<d;
}

作者:垫底抽風
链接:https://www.acwing.com/solution/content/132282/

第三道(mid)

在这里插入图片描述

题目链接

思路及AC代码(mid)

这题 题干看着挺吓人 我用AI解读了一下题目 我一开始自己做也读了半天才看懂是要干什么

在这里插入图片描述
在这里插入图片描述
我自己没有全部弄明白 在这里给出参考代码 跟Y总课上的代码是一样的 思路参考:yxc
在这里插入图片描述

#include <iostream>
#include <cstring>
#include <unordered_map>
#include <vector>

using namespace std;

int n, m;
unordered_map<string, string> vars;
vector<string> strs;

int main()
{
    cin >> n >> m;
    getchar(); //过滤cin读剩下的回车

    while(n -- )
    {
        string str;
        getline(cin, str);
        strs.push_back(str);
    }

    while(m -- )
    {
        string key, value;
        cin >> key; //变量名不含空格,可以直接cin读
        char c; //变量值含空格和双引号,用getchar()读
        while(c = getchar(), c != '\"'); //过滤第一个引号之前的内容
        while(c = getchar(), c != '\"') value += c;
        vars[key] = value; //存入哈希表
    }

    for(auto &str : strs) //遍历vetor中的每一行
    {
        for(int i = 0; i < str.size();)
            if(i + 1 < str.size() && str[i] == '{' && str[i + 1] == '{') //如果需要替换变量
            {
                int j = i + 3;
                string key;
                while(str[j] != ' ' || str[j + 1] != '}' || str[j + 2] != '}') //没有到结尾的话
                    key += str[j ++ ]; //读取模板中的变量
                cout << vars[key]; //哈希表替换模板中的值
                i = j + 3; //处理完之后要跳过空格和两个右括号
            }
            else cout << str[i ++ ]; //不需要替换变量,直接输出模板原内容
        cout << endl;
    }
    return 0;
}


相关文章:

  • 线性回归机器学习
  • 如何打开文件后缀名
  • 基于大模型的小脑扁桃体下疝畸形全流程预测与诊疗方案研究报告
  • 力扣热题 100:堆专题经典题解析
  • 建筑兔零基础自学记录42|cityengine2019导入sketchup/SU 2
  • 架构思维:高性能架构_01基础概念
  • 2025.3.9总结
  • p5.js:sound(音乐)可视化,动画显示音频高低变化
  • 基于定制开发开源AI智能名片S2B2C商城小程序的零售运营策略研究
  • linux安装Mariadb10.5并修改端口
  • Linux基础之Linux常用命令
  • 行式数据库与列式数据库区别
  • 【Linux通信篇】深入理解进程间通信——管道
  • 第八课:性能优化与高并发处理方案
  • Debian二次开发一体化工作站:提升科研效率的智能工具
  • NVIDIA显卡驱动、CUDA、cuDNN 和 TensorRT 版本匹配指南
  • 【大模型】WPS 接入 DeepSeek-R1详解,打造全能AI办公助手
  • 【实战篇】【DeepSeek 全攻略:从入门到进阶,再到高级应用】
  • 《几何原本》命题I.23
  • MySQL表的内外连接
  • 做美国市场哪个网站好/大金seo
  • 免费购物网站/搜易网服务介绍
  • 那个网站做图片好看/bt kitty磁力猫
  • 广州网站推广解决方案/厂房网络推广平台
  • 如何查网站空间/优化网站怎么真实点击
  • google帐户登录网站如何做的/培训心得体会1500字