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

news2025/3/12 15:32:22

第六次CCF-CSP认证

  • 数位之和(easy)
    • 思路及AC代码
    • 遇到的问题
  • 开心消消乐(easy)
    • 思路及AC代码
  • 画图(mid)
    • 思路及AC代码

数位之和(easy)

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

思路及AC代码

既然题目要求我们输出各位数字之和,那么我们之间把这些个位 十位…上的数拿到不就行了,一开始我还想着写一个函数去搞到这个输入n的每一位,返回一个数组,但是首先我们不知道传进来的数字是个几位数,其次就算知道也挺麻烦的,我后来想了一下,我直接把这个数搞成字符串不就行了吗,这样 这个数就不是一个整型,一个整体,而是刚刚好是我需要的 由若干个数字组成的字符串,ok,代码来咯:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string n;
    cin>>n;
    int res=0;
    for(auto c:n)
    {
        res+=c-'0';
    }
    cout<<res<<endl;
    return 0;
}

遇到的问题

在这里插入图片描述

开心消消乐(easy)

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

思路及AC代码

对于矩阵中的每个元素 s[i][j],使用四个变量 left、right、up 和 under 分别记录该元素向左右上下四个方向扩展的边界位置。
初始化 left 和 right 为当前列 j,up 和 under 为当前行 i。
使用四个 while 循环分别向左右上下四个方向扩展,直到遇到不同的数字或超出矩阵边界为止。
计算横向连续相同数字的长度为 right - left - 1,纵向连续相同数字的长度为 under - up - 1。
如果横向或纵向的连续长度大于等于 3,则将 p[i][j] 标记为 true,表示该位置可以消除;否则标记为 false。

#include <bits/stdc++.h>
using namespace std;
const int N =33;//多开几个
int s[N][N];
bool p[N][N];//状态数组
int main()
{
  int n,m;
  cin>>n>>m;
  for(int i=0;i<n;i++)
  {
      for(int j=0;j<m;j++)
      {
          cin>>s[i][j];
      }
  }
  
  for(int i=0;i<n;i++)
  {
      for(int j=0;j<m;j++)
      {
        int left=j,right=j,up=i,under=i;
        int x=s[i][j];//目前的位置
          while(left>=0 && s[i][left]==x) left--;
          while(right<m && s[i][right]==x) right++;
          while(up>=0 && s[up][j]==x) up--;
          while(under<n && s[under][j]==x) under++;
          //由某个点向四周扩展
        p[i][j]=right-left-1>=3 || under-up-1>=3;
        //如果相同数字长度大于等于3则标记为可以消除
        //下面是对这行代码的分步骤解释
      }
  }
  
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
//解释:
   // 计算左右方向相同数字的连续长度
            int leftRightLength = right - left - 1;

            // 计算上下方向相同数字的连续长度
            int upUnderLength = under - up - 1;

            // 判断左右或上下方向的连续长度是否大于等于 3
            bool canEliminate = leftRightLength >= 3 || upUnderLength >= 3;

            // 将判断结果存储到状态数组 p 中
            p[i][j] = canEliminate;
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
  
  for(int i=0;i<n;i++)
  {
      for(int j=0;j<m;j++)
      {
          if(p[i][j])
          {
              cout<<0<<' ';
          }else{
              cout<<s[i][j]<<' ';
          }
      }
      cout<<endl;
  }
  return 0;
}

画图(mid)

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

思路及AC代码

分析:
给定一个 m * n 的画布,初始画布上每个位置用点来填充 可以把每一个方块理解为一个像素
这题就两种操作(输入):
操作 0(画线):在画布上画线段,水平线段用 - 表示,垂直线段用 | 表示,线段交叉处用 + 表示。

操作 1(染色):从指定位置开始进行填充操作,将该位置及其连通区域(不跨越线段)填充为指定字符。
思路

画线段操作:对于操作 0,输入两个端点坐标,将两点之间的线段绘制在画布上。若线段交叉,交叉处标记为 +。

填充操作:对于操作 1,使用深度优先搜索(DFS)算法从指定位置开始填充,遇到线段则停止填充。(dfs如果有问题就去看一下我之前的文章迷宫问题)

下面这是yxc课上的代码 我用AI生成注释后供大家参考:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 110;

int n, m, Q;//Q表示询问次数
char g[N][N];  // 存储图形的二维数组,记录每个位置的字符
bool st[N][N]; // 标记数组,用于深度优先搜索中记录对应位置是否已访问过
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; // 定义上下左右四个方向的坐标偏移量 类似迷宫问题

// 深度优先搜索函数,用于填充颜色
// x, y:当前处理的坐标位置;c:要填充的目标字符
void dfs(int x, int y, char c) {
    st[x][y] = true; // 标记当前位置已访问,避免重复处理
    g[x][y] = c; // 将当前位置的字符设置为目标填充字符
    for (int i = 0; i < 4; i++) { // 遍历四个方向(上、右、下、左)
        int a = x + dx[i], b = y + dy[i]; // 计算相邻位置的坐标
        // 检查相邻位置是否在图形范围内,且未被访问过
        if (a >= 0 && a < m && b >= 0 && b < n && !st[a][b]) {
            // 若该位置是线条字符('-'、'|'、'+'),则不进行填充
            if (g[a][b] == '-' || g[a][b] == '|' || g[a][b] == '+') continue;
            dfs(a, b, c); // 递归处理相邻位置,实现颜色填充
        }
    }
}

int main() {
    cin >> m >> n >> Q; // 输入图形的行数m、列数n,以及操作次数Q
    // 初始化图形数组,将所有位置设置为默认字符'.'
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            g[i][j] = '.';

    while (Q--) { // 循环处理每一次操作
        int op;
        cin >> op;
        if (op == 0) { // 画矩形操作
            int x1, y1, x2, y2;
            cin >> x1 >> y1 >> x2 >> y2;
            // 调整坐标,确保x1 <= x2,y1 <= y2
            if (x1 > x2) swap(x1, x2);
            if (y1 > y2) swap(y1, y2);
            // 遍历矩形区域内的所有位置
            for (int i = x1; i <= x2; i++) {
                for (int j = y1; j <= y2; j++) {
                    auto &t = g[i][j]; // 取当前位置字符的引用,方便修改
                    // 处理矩形边界的特殊字符情况(将交叉处设为'+')
                    if (x1 == x2 && t == '-' || y1 == y2 && t == '|' || t == '+') 
                        t = '+';
                    else { // 根据矩形是横线还是竖线,设置对应字符
                        if (x1 == x2) t = '|'; // 竖线矩形
                        if (y1 == y2) t = '-'; // 横线矩形
                    }
                }
            }
        } else { // 填充操作(op == 1)
            int x, y;
            char c;
            cin >> x >> y >> c;
            memset(st, 0, sizeof st); // 重置访问标记数组
            dfs(x, y, c); // 调用深度优先搜索进行颜色填充
        }
    }

    // 输出图形,注意此处进行了坐标转换(行列交换)
    for (int i = n - 1; i >= 0; i--) {
        for (int j = 0; j < m; j++)
            cout << g[j][i]; // 按转换后的坐标输出字符
        cout << endl; // 每行输出结束后换行
    }

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 如何调用 WebService 接口

前言 调用WebService接口的方式有很多&#xff0c;今天记录一下&#xff0c;使用 Spring Web Services 调用 SOAP WebService接口 一.导入依赖 <!-- Spring Boot Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId…

算法 之 树形dp 树的中心、重心

文章目录 重心实践题目小红的陡峭值 在树的算法中&#xff0c;求解树的中心和重心是一类十分重要的算法 求解树的重心 树的重心的定义&#xff1a;重心是树中的一个节点&#xff0c;如果将这个点删除后&#xff0c;剩余各个连通块中点数的最大值最小&#xff0c;那么这个节点…

Docker 配置镜像源

》》Daemon {"registry-mirrors": ["https://docker.1ms.run","https://docker.xuanyuan.me"] }》》》然后在重新 docker systemctl restart docker

Linux 离线部署Ollama和DeepSeek-r1模型

都在复制粘贴联网状态下linux部署deepseek&#xff0c;离线状态下需要下载Ollama和DeepSeek模型&#xff0c;然后将下载包上传到linux中。 1、下载Ollama https://github.com/ollama/ollama/releases 注意&#xff1a;如果CentOS7建议安装V0.5.11版本&#xff0c;V0.5.13需要…

SQLAlchemy系列教程:如何执行原生SQL

Python中的数据库交互提供了高级API。但是&#xff0c;有时您可能需要执行原始SQL以提高效率或利用数据库特定的特性。本指南介绍在SQLAlchemy框架内执行原始SQL。 在SQLAlchemy中执行原生SQL SQLAlchemy虽然以其对象-关系映射&#xff08;ORM&#xff09;功能而闻名&#xff…

RuleOS:区块链开发的“新引擎”,点燃Web3创新之火

RuleOS&#xff1a;区块链开发的“新引擎”&#xff0c;点燃Web3创新之火 在区块链技术的浪潮中&#xff0c;RuleOS宛如一台强劲的“新引擎”&#xff0c;为个人和企业开发去中心化应用&#xff08;DApp&#xff09;注入了前所未有的动力。它以独特的设计理念和强大的功能特性&…

【编译器】VSCODE烧录ESP32-C3——xiaozhi智能聊天机器人固件

【编译器】VSCODE烧录ESP32-C3——xiaozhi智能聊天机器人固件 文章目录 [TOC](文章目录) 前言一、方法一&#xff1a;使用固件烧录工具1. 安装CH340驱动2. 打开FLASH_DOWNLOAD文件3. 选择芯片类型和烧录方式4. 选择烧录文件5. 参数配置 二、方法二&#xff1a;VSCODE导入工程1.…

显式 GC 的使用:留与去,如何选择?

目录 一、什么是显式 GC&#xff1f; &#xff08;一&#xff09; 垃圾回收的基本原理 &#xff08;二&#xff09;显式 GC 方法和行为 1. System.gc() 方法 2. 显式 GC 的行为 &#xff08;三&#xff09;显式 GC 的使用场景与风险 1. JVM 如何处理显式 GC 2. 显式 GC…

SpringMVC概述以及入门案例

目录 SpringMVC概述 为什么需要Spring MVC&#xff1f; SpringMVC入门 工作流程分析 SpringMVC概述 SpringMVC技术与Servlet技术功能等同&#xff0c;均属于Web层开发技术。SpringMVC是一种基于java实现MVC模型的轻量级Web框架。 为什么需要Spring MVC&#xff1f; 在传统J…

⭐LeetCode周赛 3468. 可行数组的数目——暴力与数学⭐

⭐LeetCode周赛 3468. 可行数组的数目——暴力与数学⭐ 示例 1&#xff1a; 输入&#xff1a;original [1,2,3,4], bounds [[1,2],[2,3],[3,4],[4,5]] 输出&#xff1a;2 解释&#xff1a; 可能的数组为&#xff1a; [1, 2, 3, 4] [2, 3, 4, 5] 示例 2&#xff1a; 输入&…

javaEE初阶————多线程进阶(2)

今天来继续带大家学习多线程进阶部分啦&#xff0c;今天是最后一期啦&#xff0c;下期带大家做一些多线程的题&#xff0c;我们就可以开始下一个环节啦&#xff1b; 1&#xff0c;JUC&#xff08;java.util.concurrent&#xff09;的常见类 1&#xff09;Callable 接口 我们之…

maven无法解析插件 org.apache.maven.plugins:maven-jar-plugin:3.4.1

解决流程 1.修改maven仓库库地址 2.删除本地的maven仓库 maven插件一直加载有问题: 无法解析插件 org.apache.maven.plugins:maven-jar-plugin:3.4.1 开始以为maven版本有问题&#xff0c;重装了maven&#xff0c;重装了idea工具。结果问题还是没解决。研究之后发现&#xf…

Android Studio右上角Gradle 的Task展示不全

Android Studio 版本如下&#xff1a;Android Studio lguana|2023.21, 发现Gradle 的Tasks阉割严重&#xff0c;如下图&#xff0c;只显示一个other 解决方法如下&#xff1a;**Setting>Experimental>勾选Configure all gradle tasks during Gradle Sync(this can make…

UDP协议 TCP协议(格式 超时重传 滑动窗口 拥塞控制...)

UDP协议 格式 UDP协议头部格式由8个字节组成&#xff0c;由4个2字节大小的字段组成。 源端口&#xff08;Source Port&#xff0c;16 位&#xff09;&#xff1a; 发送端的端口号&#xff0c;标识数据从哪个端口发出。如果不需要&#xff0c;则可以填 0。 目标端口&#xff0…

爱普生温补晶振 TG5032CFN高精度稳定时钟的典范

在科技日新月异的当下&#xff0c;众多领域对时钟信号的稳定性与精准度提出了极为严苛的要求。爱普生温补晶振TG5032CFN是一款高稳定性温度补偿晶体振荡器&#xff08;TCXO&#xff09;。该器件通过内置温度补偿电路&#xff0c;有效抑制环境温度变化对频率稳定性的影响&#x…

【网络安全工程】任务11:路由器配置与静态路由配置

目录 一、概念 二、路由器配置 三、配置静态路由CSDN 原创主页&#xff1a;不羁https://blog.csdn.net/2303_76492156?typeblog 一、概念 1、路由器的作用&#xff1a;通过路由表进行数据的转发。 2、交换机的作用&#xff1a;通过学习和识别 MAC 地址&#xff0c;依据 M…

Webservice创建

Webservice创建 服务端创建 3层架构 service注解&#xff08;commom模块&#xff09; serviceimpl&#xff08;server&#xff09; 服务端拦截器的编写 客户端拦截器 客户端调用服务端&#xff08;CXF代理&#xff09; 客户端调用服务端&#xff08;动态模式调用&a…

使用VS Code remote ssh进行远程开发的笔记

本文是在VS Code中使用 remote ssh 进行开发的笔记。 安装插件 打开VS Code&#xff0c;在扩展区找到remote相关插件&#xff0c;安装之。下图中红色框出来的是已经安装了的插件&#xff08;圆圈处即为Remote Explorer&#xff09;。 实践 连接服务器 新建连接&#xff1a…

C语言每日一练——day_3(快速上手C语言)

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第三天。&#xff08;会连续更新&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff09;是一种在编程竞赛中用…

PostgreSQL - Windows PostgreSQL 下载与安装

Windows PostgreSQL 下载与安装 1、PostgreSQL 下载 下载地址&#xff1a;https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 2、PostgreSQL 安装 启动安装程序 -> 点击 【Next】 指定安装路径 -> 点击 【Next】 默认勾选 -> 点击 【Next】 指…