CSDN编程竞赛第六期

2023-10-31

CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16

本次是我第二次参加CSDN举办的编程竞赛,这一次的题相比上一次简单不少,对编程新人或者刚开始学习算法的人很友好。

前言/背景

本次CSDN编程竞赛第六期是4个编程题

大赛简介

参赛时间:9月18日8:30-11:00

时长:2小时(只要在规定参赛时间内进入比赛,都能获得2小时的答题时间,即使总时间超过了11:00)

参赛流程

首先就是在赛前进行一个报名,主要包含自己的一些基本信息,到比赛的日期时,进入比赛首页,点击进入比赛,输入姓名和电话,就能进入系统答题,当点击结束答题或者时长超过两个小时就会终止答题,并将当前成绩算为最终成绩不可修改。

参赛经历

比赛前,预先在各大刷题平台上刷了一些基础的题,熟悉一些编程算法,以免在比赛的时候手足无措;临近比赛,将电脑打开比赛页面,随时等待进入系统,并且最好选择一个较为安静的地方,有利于自己对问题的思考;正式比赛的时候,就按照题目顺序做的题。本次也是拿到了满分,很高兴。

解题思路

第一题:X国最近开始严管枪火。 像是“ak”,“m4a1”,“skr”。都是明令禁止的。 现在小Q查获了一批违禁物品其中部分是枪支。 小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)

根据题目意思得到就是查出[“ak”,“m4a1”,“skr”]出现了多少次。

 这题其实很简单,直接使用for循环遍历,并利用C++的string直接进行“==”比较即可,相等就对答案进行加一

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int main() {
    int n;
    std::vector<std::vector<std::string>> vec;
    std::cin>>n;
    std::string line, token;
    for (size_t i = 0; i < n; i++){
        std::vector<std::string> s;
        getline(std::cin >> std::ws,line);
        std::stringstream tokens(line);
        while(std::getline(tokens, token, ' ')){
            s.push_back((token));
        }
        vec.push_back(s);
    }
    int result = 0;
    for(int i = 0;i < n;i ++) {
        for(int j = 0;j < vec[i].size();j ++) {
            std::string str = vec[i][j];
            if(str == "ak" || str == "m4a1" || str == "skr") {
                result ++;
            }
        }
    }
    std::cout<<result<<std::endl;
    return 0;
}

第二题:鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理, 但是这次鬼艺接手了, 你能帮鬼艺写一个 程序统计每年消耗数量最多的鬼画符吗?

根据题目意思可知,就是求得出现次数最多的字符串是哪一个

思路:直接暴力,使用map存储每一个字符串出现的次数,并使用一个变量存储出现的最大次数是多少,每次判断最大出现次数是否为当前字符串,并进行更新答案即可

 

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    std::vector<std::vector<std::string>> vec;
    std::cin>>n;
    std::string line, token;
    for (size_t i = 0; i < n; i++){
        std::vector<std::string> s;
        getline(std::cin >> std::ws,line);
        std::stringstream tokens(line);
        while(std::getline(tokens, token, ' ')){
            s.push_back((token));
        }
        vec.push_back(s);
    }
    std::string result;
    map<string, int> num;
    int count = 0;
    for(int i = 1;i < n;i ++) {
        for(int j = 0;j < vec[i].size();j ++) {
            string str = vec[i][j];
            num[str] ++;
            if(num[str] > count) {
                count = num[str];
                result = str;
            }
        }
    }
    std::cout<<result<<std::endl;
    return 0;
}

第三题:已知字符串str,str表示邮箱的不标准格式。 其中”.”会被记录成”dot”,”@”记录成”at”。 写一个程序将str转化成可用 的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)

思路:直接暴力,for循环遍历字符串,每次从当前字符开始往后取三个字符,判断是否为dot,然后进行替换,取两个字符,判断是否为at,以及已经替换的at次数是否小于1,再进行替换即可

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
int main() {
    std::string str;
    std::cin>>str;
    std::string result = "";
    int number = 0;
    int len = str.size();
    for(int i = 0;i < len;i ++) {
        if(i + 2 < len - 1 && i > 0) {
            string temp = "";
            for(int j = 0;j < 3;j ++) {
                temp += str[i + j];
            }
            if(temp == "dot") {
                result += ".";
                i = i + 2;
                continue;
            }
        }
        if(i + 1 < len - 1 && i > 0) {
            string temp = "";
            for(int j = 0;j < 2;j ++) {
                temp += str[i + j];
            }
            if(temp == "at" && number == 0) {
                result += "@";
                i = i + 1;
                number ++;
                continue;
            }
        }
        result += str[i];
    }
    std::cout<<result<<std::endl;
    return 0;
}

第四题:给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3

思路:直接暴力,每次判断当前元素vec[i]是否大于vec[i - 1],如果大于就对当前上升序列长度加一,每次更新最长递增的区间长度即可,如果遇到vec[i] <= vec[i - 1],就将当前上升序列长度置为1

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include<bits/stdc++.h>
using namespace std;
int main() {
    int n;
    std::vector<int> vec;
    std::cin>>n;
    std::string line_0, token_0;
    getline(std::cin >> std::ws,line_0);
    std::stringstream tokens_0(line_0);
    while(std::getline(tokens_0, token_0, ' ')){
        vec.push_back(std::stoi(token_0));
    }
    int result = 1;
    int count = 1;
    for(int i = 1;i < n;i ++) {
        if(vec[i] > vec[i - 1]) {
            count ++;
            result = max(result, count);
        }
        else count = 1;
    }
    std::cout<<result<<std::endl;
    return 0;
}

经验心得

本次竞赛的总体难度偏低,适合刚学习算法的新人,上一次参加CSDN的编程竞赛,只拿到了82.5,算是弥补了我一个心愿吧

资料分享

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSDN编程竞赛第六期 的相关文章

  • 大学python笔记_天文数据处理笔记之python(1)

    前阵子学完了coursera上悉尼大学的天文数据处理课程 感觉非常适合想学习天文的python初学者所以分享出来 顺便复习一下 网课的地址一会补在评论里 所有的笔记都记录在onenote上 为了方便观看先上图片 想要复制代码的可以往下看 最

随机推荐

  • Facebook 架构学习

    Facebook 架构学习 网址 http www dbanotes net arch facebook arch note html 在 QCon 2008 旧金山站 上Facebook 做的这个技术分享有不少值得借鉴的东西 所以 暂停对
  • java按照模板导出pdf或者word

    一 java按照模板导出pdf 一 制作模板 1 在word里制作模板 因为PDF常用的软件不支持编辑 所以先用Word工具 如WPS或者Office新建一个空白Word文档 里面制作出自己想要的样式 2 将Word转换成PDF形式 将设置
  • 微信小程序切片工具-右滑删除效果(带视频)右滑删除效果(带视频)-史上最简单、最快的的右滑制作

    下面讲解如何进行小程序的右滑删除效果 史上最简单 最快的的右滑制作 视频及演示文件下载地址 http www ymznkf com resources view aspx id 1507 1 导入效果图 并按规则进行切片 2 设置列表的数据
  • 2023node期末课设-超市管理系统node+js+css+html+mysql(附下载链接)

    超市管理系统node js css html mysql 源码 数据库文件 介绍文档 点我下载项目资源 后端部分 后端用node启用了四个服务器 四个服务器分别为可以启动对应的页面 前端显示图标的数据均为数据库获取 操作数据库可以实时更改页
  • 关于mvvm简易封装(一)

    前言 关于mvvm的出现已经很长一段时间了 但是博主一直没有太过于关注 但是由于最近接触的和新出的很多框架都是基于mvvm模式去开发的 于是花了点时间看了下 关于学习mvvm前 可能需要首先了解databing 请自行百度了 介绍datab
  • 音视频造数据的路

    目录 1 多路数据制造 1 合并多路 2 视频修改分辨率 3 修改视频码率 4 修改帧率 2 音频流多声道合成 1 双声道合并单声道 2 双声道提取 3 双声道转双音频流 4 单声道转双声道 5 两路音频合并双声道 6 合并多声道 7 声道
  • 光收发器安装介绍,光纤收发器连接示意图解

    对于光纤布线来讲光纤收发器都是非常熟悉的产品了 在光纤网络中 我们常常会使用到光纤收发器 那么 在网络布线过程中光纤收发器该怎么连接呢 接下来飞畅科技的小编就来为大家介绍下光纤收发器安装以及连接图解 感兴趣的朋友一起来看看吧 一 光收发器安
  • java实现excel的导出之使用easyExcel

    前言 在我们的项目需求中 经常会遇到导出的需求 其中excel的导出最为常见 生成Excel比较有名的框架有Apache poi jxl等 但他们都存在一个严重的问题就是非常的耗内存 如果你的系统并发量不大的话可能还行 但是一旦并发上来后一
  • PCL K4PCS算法实现点云配准

    目录 一 算法原理 1 算法概述 2 算法流程 3 参考文献 二 代码实现 三 结果展示 一 算法原理 1 算法概述 K 4PCS方法主要分为两个步骤 1 利用VoxelGrid滤波器对点云进行下采样 然后使用标准方法 3D harris或
  • 通过screw生成数据库文档,支持(WORD,HTML,MD)

    文章目录 前言 一 使用步骤 基于springboot项目 1 pom xml引入 2 运行screw 3 查看文档效果 前言 你还在通过手写数据库文档吗 out了 通过screw插件一键生成数据库文档 可生成HTML WORD MD三种类
  • 串口通信(PC-51单片机)

    实验现象 下载程序后打开串口调试助手 将波特率设置为4800 选择发送的数据就可以显示 接线说明 具体接线图可见开发攻略对应实验的 实验现象 章节 注意事项 include reg52 h
  • Luci的工作流程

    1 浏览器敲入192 168 1 1后就 路由器作为uhttp server会把 www index html这个页面返回给浏览器 而且这个页面又会刷新 去请求页面 luci cgi 代码如红色标记
  • vue中使用cookies和crypto-js实现记住密码和加密

    不多BB 搞快 搞快 使用crypto js加解密 第一步 安装 npm install crypto js 第二步 在你需要的vue组件内import import CryptoJS from crypto js 第三步 使用 Encry
  • 【Idea技巧】01.Idea无法打开,报错 Start Failed

    序章 个人使用Idea版本 借鉴文章 添加链接描述 解决方案 管理员命令cmd netsh int ipv4 set dynamicport tcp start 49152 num 16383 netsh int ipv4 set dyna
  • 怎么用计算机计算年月份,如何使用Excel计算两个日期之间的月数?

    一 这可以通过DATEDIF函数完成 二 DATEDIF函数的定义 DATEDIF函数是Excel中的隐藏函数 而不是帮助和插入公式中的隐藏函数 返回两个日期之间的年 月 日间隔的数量 DATEDIF函数通常用于计算两个日期之间的时差 语法
  • Windows11之QT开发框架超详细下载安装与使用教程

    文章目录 前言 3 1 QT开发框架下载 3 2 QT开发框架安装 3 3 QT开发框架使用 总结 前言 本博客的主要内容为在Windows11系统下的QT开发框架的下载安装与使用教程 QT开发框架开发C 图形化界面十分有用 读者跟着我一步
  • 球坐标系下梯度、散度、旋度和拉普拉斯的简单计算

    转载于 https www cnblogs com hiramlee0534 p 5480045 html
  • 七天玩转Redis

    一 简要了解 redis是一个key value存储系统 和Memcached类似 它支持存储的value类型相对更多 包括string 字符串 list 链表 set 集合 zset sorted set 有序集合 和hash 哈希类型
  • ELK系列(九)、配置ES和Kibana的用户密码

    前面介绍的都是没有设置密码的情况 ES默认没有密码 什么数据泄露的新闻简直是家常便饭 所以这里还是建议大家给ES和kibana设置用户登陆 或者使用nginx限制IP或用户访问 本文介绍ELK自带的创建用户的方式 ELK系列 一 安装Ela
  • CSDN编程竞赛第六期

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 本次是我第二次参加CSDN举办的编程竞赛 这一次的题相比上一次简单不少 对编程新人或者刚开始学习算法的人很友好 前言 背景 本次CSDN编程