C++ CCF真题----画图

2023-05-16

问题描述

  用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术。例如,下图是用 ASCII 字符画出来的 CSPRO 字样。
这里写图片描述
本题要求编程实现一个用 ASCII 字符来画图的程序,支持以下两种操作:
  画线:给出两个端点的坐标,画一条连接这两个端点的线段。简便起见题目保证要画的每条线段都是水平或者竖直的。水平线段用字符 - 来画,竖直线段用字符 | 来画。如果一条水平线段和一条竖直线段在某个位置相交,则相交位置用字符 + 代替。
  填充:给出填充的起始位置坐标和需要填充的字符,从起始位置开始,用该字符填充相邻位置,直到遇到画布边缘或已经画好的线段。注意这里的相邻位置只需要考虑上下左右 4 个方向,如下图所示,字符 @ 只和 4 个字符 * 相邻。
这里写图片描述  

输入格式

  第1行有三个整数m, n和q。m和n分别表示画布的宽度和高度,以字符为单位。q表示画图操作的个数。
第2行至第q + 1行,每行是以下两种形式之一:
0 x1 y1 x2 y2:表示画线段的操作,(x1, y1)和(x2, y2)分别是线段的两端,满足要么x1 = x2 且y1 ≠ y2,要么 y1 = y2 且 x1 ≠ x2。
1 x y c:表示填充操作,(x, y)是起始位置,保证不会落在任何已有的线段上;c 为填充字符,是大小写字母。
画布的左下角是坐标为 (0, 0) 的位置,向右为x坐标增大的方向,向上为y坐标增大的方向。这q个操作按照数据给出的顺序依次执行。画布最初时所有位置都是字符 .(小数点)。

输出格式

  输出有n行,每行m个字符,表示依次执行这q个操作后得到的画图结果。

样例输入

4 2 3
1 0 0 B
0 1 0 2 0
1 0 0 A

样例输出

AAAA
A--A

样例输入

16 13 9
0 3 1 12 1
0 12 1 12 3
0 12 3 6 3
0 6 3 6 9
0 6 9 12 9
0 12 9 12 11
0 12 11 3 11
0 3 11 3 1
1 4 2 C

样例输出

................
...+--------+...
...|CCCCCCCC|...
...|CC+-----+...
...|CC|.........
...|CC|.........
...|CC|.........
...|CC|.........
...|CC|.........
...|CC+-----+...
...|CCCCCCCC|...
...+--------+...
................

评测用例规模与约定

  所有的评测用例满足:2 ≤ m, n ≤ 100,0 ≤ q ≤ 100,0 ≤ x < m(x表示输入数据中所有位置的x坐标),0 ≤ y < n(y表示输入数据中所有位置的y坐标)。

代码

    #include <iostream>
    #include <windows.h>
    using namespace std;
    typedef struct tagDIRECTION//泛洪算法需要的结构体
    {
        int x_offset;
        int y_offset;
    }DIRECTION;
    DIRECTION direction_4[] = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } };
    void drawline(char *p, int *t, int x1, int y1, int x2, int y2, int m, int n)//画线段函数
    {
        char *temp;
        int *temp1;
        if (x1 == x2)
        {
            temp = p + (m - y1 - 1) * n + x1;
            temp1 = t + (m - y1 - 1) * n + x1;
            *temp = '|';
            *temp1 += 1;
            for (; temp != p + (m - y2 - 1) * n + x2;)
            {
                if (y1 > y2)
                {
                    *(temp + n) = '|';
                    *(temp1 + n) += 1;
                    temp = temp + n;
                    temp1 = temp1 + n;
                }
                if (y1 < y2)
                {
                    *(temp - n) = '|';
                    *(temp1 - n) += 1;
                    temp = temp - n;
                    temp1 = temp1 - n;
                }
            }

        }
        else if (y1 == y2)
        {
            temp = p + (m - y1 - 1) * n + x1;
            temp1 = t + (m - y1 - 1) * n + x1;
            *temp = '-';
            *temp1 += 1;
            for (; temp != p + (m - y2 - 1) * n + x2;)
            {
                if (x1 > x2)
                {
                    *(temp - 1) = '-';
                    *(temp1 - 1) += 1;
                    temp = temp - 1;
                    temp1 = temp1 - 1;
                }
                if (x1 < x2)
                {
                    *(temp + 1) = '-';
                    *(temp1 + 1) += 1;
                    temp = temp + 1;
                    temp1 = temp1 + 1;

                }
            }
        }
    }
    void fill(char *p, int x1, int y1, int m, int n, char old_color, char new_color)//填充函数,泛洪算法
    {
        char *temp;
        temp = p + (m - y1 - 1) * n + x1;
        if (*temp == old_color)
        {
            *temp = new_color;
            for (int i = 0; i < 4; i++)
                fill(p, x1 + direction_4[i].x_offset, y1 + direction_4[i].y_offset, m, n, old_color, new_color);
        }
    }
    int main()
    {
        int m, n, q, i, j;
        int func, x1, y1, x2, y2;
        char old_color, new_color;
        cin >> m >> n >> q;
        int temp;
        temp = m;
        m = n;
        n = temp;
        char * map = new char[m * n];
        int * mark = new int[m * n];
        char * tmap = map;
        int * tmark = mark;
    //初始化数组
        for (i = 0; i < m; i++)
            for (j = 0; j < n; j++)
            {
                * (tmap + i * n + j) = '.';
                * (tmark + i * n + j) = 0;
            }
        for (i = 0; i < q; i++)
        {
            cin >> func;
            if (func == 0)
            {
                cin >> x1 >> y1 >> x2 >> y2;
                drawline(tmap, tmark, x1, y1, x2, y2, m, n);
            }
            else if (func == 1)
            {
                cin >> x1 >> y1 >> new_color;
                old_color = * (tmap + (m - y1 - 1) * n + x1);
                fill(tmap, x1, y1, m, n, old_color, new_color);
            }
        }
    //输出
        for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
        if ( * (tmark + i * n + j ) > 1)
            * (tmap + i * n + j) = '+';    //将交点改为+
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
                cout << * (tmap + i * n + j);
            cout << endl;
        }
        delete[] map;
        delete[] mark;  //释放内存
        system("pause");
        return 0;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ CCF真题----画图 的相关文章

  • CCF 202012-2 期末预测之最佳阈值 python

    CCF 202012 2 期末预测之最佳阈值 python 100 这道题对时间进行了限制 xff0c 所以要想一次遍历得出结果 xff0c 就应该思考 xff01 样例输入 安全指数011357挂科情况001111 思路详解 lt 前提
  • ccf 游戏

    试题编号 xff1a 201604 4试题名称 xff1a 游戏时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a 问题描述 小明在玩一个电脑游戏 xff0c 游戏在一个 n m的方格图上进行 xff0c
  • 【CCF-CSP】201409-4 最优配餐 C++

    文章目录 一 题目二 解题1 题目2 代码3 提交结果 总结1 代码思路 一 题目 原题目链接 二 解题 1 题目 一个BFS xff08 宽度优先搜索 xff09 的实现 xff0c 用于处理迷宫中的节点 下面是代码的详细解释 xff1a
  • ccf认证的期刊和会议_ccf推荐AI、CV方向的国际学术期刊、会议

    写在前面 xff1a 本篇文章摘自公众号 算法攻城狮 中国计算机学会官方 https www ccf org cn 公布了十个领域的国际期刊及会议信息 xff0c 这十个领域分别为 xff1a 1 计算机体系结构 xff0f 高性能计算 x
  • C++ CCF真题----画图

    问题描述 用 ASCII 字符来画图是一件有趣的事情 xff0c 并形成了一门被称为 ASCII Art 的艺术 例如 xff0c 下图是用 ASCII 字符画出来的 CSPRO 字样 本题要求编程实现一个用 ASCII 字符来画图的程序
  • CCF CSP 2021-09-2 非零段划分 题解及满分代码(C++11)

    文章目录 问题描述问题分析70分解法满分解法 问题描述 题目描述 A 1 A 2
  • CCF CSP 2021-04-2 邻域均值 题解及满分代码(C++11)

    文章目录 题目描述问题分析70分解法满分解法 题目描述 现给定邻域参数 r 和阈值 t xff0c 试统计输入灰度图像中有多少像素处于较暗区域 输入格式 输入共 n 43 1 行 输入的第一行包含四个用空格分隔的正整数 n L r 和 t
  • CCF CSP 2019-12-1 “报数” 解题思路及满分代码(C++11)

    文章目录 题目描述解题思路满分代码 题目描述 解题思路 题目比较简单 xff0c 需要搞清楚两个点 xff1a 跳过的数是7的倍数或含7的数 xff0c 即取余为0或各个位上有7的数n代表的是总共的报数个数 xff0c 跳过的数是不算的 下
  • CCF_Markdown(正则表达式)

    试题编号 xff1a 201703 3试题名称 xff1a Markdown时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a 问题描述 Markdown 是一种很流行的轻量级标记语言 xff08 lig
  • CCF推荐国际学术会议和期刊目录2019年

    链接 xff1a 全目录下载地址
  • CCF CSP 201512-3 画图

    字符串基础题 问题描述 用 ASCII 字符来画图是一件有趣的事情 xff0c 并形成了一门被称为 ASCII Art 的艺术 例如 xff0c 下图是用 ASCII 字符画出来的 CSPRO 字样 lt 本题要求编程实现一个用 ASCII
  • 2020 CCF 非专业级别软件能力认证第一轮(CSP-S) 提高级 C++ 语言试题

    目录 一 选择题 xff1a 每题 2 分 xff0c 共 15 题 xff0c 30 分 在每小题给出的四个选项中 xff0c 只有一项是符合题目要求的 二 阅读程序 程序输入不超过数组或字符串定义的范围 xff1b 判断题正确填 3 x
  • CCF 201903-4 消息传递接口

  • ccf-csp认证期末预测之最佳阈值(2020年12月13日)

    期末预测之最佳阈值 题目描述 具体来说 顿顿评估了 位同学上学期的安全指数 其中第 1 位同学的安全指数为 是一个 0 108 范围内的整数 同时 该同学上学期的挂科情况记作 0 1 其中 0 表示挂科 1 表示未挂科 相应地 顿顿用 表示
  • CCF CSP 中国计算机学会-CCF计算机软件能力认证(计算机水平测试)-简介-详情

    CCF gt gt 简介 中国计算机学会 英文名为China Computer Federation 简称CCF 是由从事计算机及相关科学技术领域的科研 教育 开发 生产 管理 应用和服务的个人及单位自愿结成 依法登记成立的全国性 学术性
  • CCF-CSP201903-4-消息传递接口

    首先应当思考的是如何对输入数据进行存储 通过样例输入可以看出 每一个进程执行的操作数量都是不定的 因此可以采用 vectorg N 进行存储 其中g i 表示i号进程应执行操作 也可以采用queueq N 进行存储q i 表示i号进程应执行
  • CCF/CSP 201409-3 字符串匹配(满分题解Java版)

    此题虽然放在了第三题 但是如果对Java的API了解的比较好的同学 解这道题一点都不难 比前几题都要简单一些 题目描述 官方题目地址 读题请点击 Java满分题解 import java util Scanner next 与 nextLi
  • CCF-CSP真题《202305-1 重复局面》思路+python,c++满分题解

    想查看其他题的真题及题解的同学可以前往查看 CCF CSP真题附题解大全 试题编号 202305 1 试题名称 重复局面 时间限制 1 0s 内存限制 512 0MB 问题描述 题目背景 国际象棋在对局时 同一局面连续或间断出现3次或3次以
  • 第一次CCF CSP认证体验

    今天是我第一次参加CCF CSP认证 虽然这已经是第十二次CCF认证了 感觉题目有点难欸 前面两道题暴力写完 然后看了第三题 哇 简直难写 第四题看了看 数据1e5条边 不会做 就写了一个暴力 希望能过点数据 第五题感觉像是一个动态规划 完
  • CCF-CSP-202109-4-收集卡牌

    原题链接 满分代码 include

随机推荐

  • Mac M1及以上芯片在Ubuntu上使用conda安装JupyterLab

    Mac M1及以上芯片在Ubuntu上使用conda安装JupyterLab 1 下载最新版本的Miniconda安装包 xff1a span class token function wget span https repo anacon
  • 【python】tkinter程序打包成exe可执行文件 全流程记录(windows系统)

    需求背景 Tkinter 是 Python 的标准 GUI 库 Python 使用 Tkinter 可以快速的创建 GUI 应用程序 我用python写了一个可视化界面 xff0c 利用算法计算患COVID 19的概率 现在需要将Pytho
  • STM32F103系列点灯程序

    STM32F103系列点灯程序 点灯流程1 找到LED灯对应寄存器引脚的基地址1 1在原理图上找到LED灯的位置1 2找到LED灯对应的引脚1 3打开数据手册找到对应的基地址 2 设置PE5 PB5寄存器模式为推挽输出模式2 1配置PE5
  • Rust GUI 库的状态

    图形用户界面 GUI 为与计算机交互提供了直观的可视化前端 与使用文本进行输入和输出操作的命令行界面 CLI 不同 xff0c GUI 使用图标 窗口和菜单等视觉指示器来实现更好的用户交互和体验 随着时间的推移 xff0c Rust 越来越
  • 使用 Rust 和 React 构建实时聊天应用程序

    如果您希望构建既快速又可靠的实时聊天应用程序 xff0c 请考虑使用 Rust 和 React Rust 以其速度和可靠性着称 xff0c 而React 是最流行的用于构建用户界面的前端框架之一 在本文中 xff0c 我们将演示如何使用 R
  • Mybatis插件之Mybatis-Plus(一)

    目录 一 简介 二 开发时注意事项 xff1a 1 Mybatis 43 MP xff08 纯Mybatis与Mybatis Plus整合 xff09 2 Spring 43 Mybatis 43 MP 3 SpringBoot 43 My
  • 解决:Linux8整合Nginx过程中报错:src/os/unix/ngx_user.c: 在函数‘ngx_libc_crypt’中: src/os/unix/ngx_user.c:36:7

    解决 xff1a Linux8整合Nginx过程中报错 xff1a src os unix ngx user c 在函数 ngx libc crypt 中 src os unix ngx user c 36 7 一 问题描述 xff1a x
  • 从无法启动的Mac中恢复数据的3种方法

    当Mac无法启动并且您没有备份重要数据时 xff0c 情况可能是灾难性的 也许你有不可替代的照片 写一半的手稿或其他一些有价值的数据被困在你行为不端的Mac中 如果你的Mac根本无法开机 xff0c 那么检索数据可能会非常困难 但是 xff
  • 运动会

    运动会 group 问题描述 在一次运会上 有一个比赛项目 共有 N 个人参加比赛 要将这 N 个人分组 每组人 数不少于 K 个 问有多少种分组方式 比如有 16 个运动员 每组人数不少于 5 个 共有 6 种分组方式 1 分一组 为 1
  • C语言如何处理中文字符串

    在 C 语言中 xff0c 我们可以使用 Unicode 编码来表示中文字符串 xff0c 也可以使用 ANSI 码或其他本地编码来表示中文字符串 Unicode 是一种国际标准编码方式 xff0c 包括了世界上几乎所有的语言字符和符号 C
  • 判断101-200之间有多少个素数,并输出所有素数及素数的个数。程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

    include lt stdio h gt include lt math h gt int main int argc char argv int m i k h 61 0 leap 61 1 leap相当于标志位 printf 34 n
  • kali 进不去桌面,kali因更新软件进不去图形化界面

    起因 xff1a 今天在更新软件的时候 xff0c 打开虚拟机发现无法进入图形界面 xff0c 只有命令行模式 xff0c 估计图形化界面出了问题 xff0c 于是搜索kali无法打开图形化界面的原因 我预测应该是在更新的时候 网络中断 x
  • 爱番番在线修改电话号方法

    第一个位置 xff1a 自动回复设置 第二个位置 xff1a 样式与设置
  • 《乌合之众》—— 大众心理学

    罗马帝国的衰亡和阿拉伯帝国的建立 xff0c 乍看是政党更迭 xff0c 外敌入侵或王朝覆灭造成的 xff0c 但仔细研究一下这些时间就会发现 xff0c 那就是民众的思想观念发生了深刻的变化 当今时代 xff0c 人类的思想正在不断地发生
  • 2022 FB发布十大政策,怎么避免被封

    个人特征 xff1a Meta 广告发布政策禁止广告内容涉及个人特征 xff0c 包括避免在广告中使用有关用户个人特征的设定 骇人听闻内容 xff1a 我们的广告发布政策禁止广告包含骇人听闻的内容 xff0c 例如避免使用触目惊心 骇人听闻
  • 创建BM平台网址

    business facebook com 创建BM平台网址 BM平台是Facebook提供的免费工具 商务管理平台即business manager 简称BM xff0c
  • 错层式住宅的共同特点:

    错层式住宅的共同特点 xff1a 半楼梯 有效利用空间 飘窗 附属的低层车库 低层地下室 低坡屋顶 混合材料
  • 电动车可以使用实心轮胎吗?

    最好不要使用 xff0c 电动车轮胎不设计成实心的原因费电是一方面 xff0c 降低速度 舒适性会变得差 具体原因分析如下 xff1a 1 实心轮胎增加重量 xff0c 影响速度 轮胎做成实心的会增加电动的重量 xff0c 会使骑行更加费电
  • 感应加热设备技术

    什么是感应加热设备 xff1f 什么是感应加热设备 xff1f 感应加热提供了一种可控的局部加热方法 xff0c 无需接触被加热的零件 xff08 组件 xff09 热量是通过将交变磁场感应到导电材料中而产生的 感应加热设备技术 退火和回火
  • C++ CCF真题----画图

    问题描述 用 ASCII 字符来画图是一件有趣的事情 xff0c 并形成了一门被称为 ASCII Art 的艺术 例如 xff0c 下图是用 ASCII 字符画出来的 CSPRO 字样 本题要求编程实现一个用 ASCII 字符来画图的程序