【NOIP2008普及组复赛】 题4:立体图

题4:立体图

【题目描述】

小渊是个聪明的孩子,他经常会给周围的小朋友讲些自己认为有趣的内容。最近,他准备给小朋友讲解立体图,请你帮他画出立体图。

小渊有一块面积为mn的矩形区域,上面有mn个边长为1的格子,每个格子上堆了一些同样大小的积木(积木的长宽高都是1),小渊想请你打印出这些格子的立体图。我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以一种形式摆放。

在这里插入图片描述

每个顶点用1个加号"+“表示,长用3个”-“表示,宽用1个”/“表示,高用两个”|“表示。符号”+“,”-“,”/“,”|“的ASCII码分别是43,45,47,124。字符”.“(ASCII码46)需要作为背景输出,即立体图中的空白部分需要用”."来代替。立体图的画法如下面的规则:

若两块积木左右相邻,图示为:

在这里插入图片描述

若两块积木上下相邻,图示为:

在这里插入图片描述

若两块积木前后相邻,图示为:

在这里插入图片描述

立体图中,定义位于第(m,1)的格子(即第m行第1列的格子)上面的自底向上的第一块积木(即最下面的一块积木)的左下角顶点为整张图最左下角的点。

【输入文件】

第一行有用空格隔开的2个整数m和n,表示有m*n个格子(1<=m,n<=50)。

接下来的m行,是一个m*n的矩阵,每行有n个用空格隔开的整数,其中第i行第j列上的整数表示第i行第j列的格子上摞有多少个积木(1<=每个格子上的积木数<=100)。

【输出文件】

包含题目要求的立体图,是一个K行L列的字符矩阵,其中K和L表示最少需要K行L列才能按规定输出立体图。

【输入样例1】

3 4
2 2 1 2
2 2 1 1
3 2 1 2

【输出样例1】

在这里插入图片描述

【代码如下】:


#include <bits/stdc++.h>
using namespace std;
char s[600][600];
void hua(int y, int x) {
  s[y][x] = '+';
  s[y][x + 1] = '-';
  s[y][x + 2] = '-';
  s[y][x + 3] = '-';
  s[y][x + 4] = '+';
  s[y + 1][x] = '|';
  s[y + 1][x + 1] = ' ';
  s[y + 1][x + 2] = ' ';
  s[y + 1][x + 3] = ' ';
  s[y + 1][x + 4] = '|';
  s[y + 1][x + 5] = '/';
  s[y + 2][x] = '|';
  s[y + 2][x + 1] = ' ';
  s[y + 2][x + 2] = ' ';
  s[y + 2][x + 3] = ' ';
  s[y + 2][x + 4] = '|';
  s[y + 2][x + 5] = ' ';
  s[y + 2][x + 6] = '+';
  s[y + 3][x] = '+';
  s[y + 3][x + 1] = '-';
  s[y + 3][x + 2] = '-';
  s[y + 3][x + 3] = '-';
  s[y + 3][x + 4] = '+';
  s[y + 3][x + 5] = ' ';
  s[y + 3][x + 6] = '|';
  s[y + 4][x + 1] = '/';
  s[y + 4][x + 2] = ' ';
  s[y + 4][x + 3] = ' ';
  s[y + 4][x + 4] = ' ';
  s[y + 4][x + 5] = '/';
  s[y + 4][x + 6] = '|';
  s[y + 5][x + 2] = '+';
  s[y + 5][x + 3] = '-';
  s[y + 5][x + 4] = '-';
  s[y + 5][x + 5] = '-';
  s[y + 5][x + 6] = '+';
}
int main(int argc, char *argv[]) {
  int a[55][55];
  int x1, y1, t, x, y;
  int i, j, k;
  int m, n;
  cin >> m >> n;
  x1 = 4 * n + 2 * m + 1;
  y1 = 0;
  for (i = 0; i < m; i++)
    for (j = 0; j < n; j++) {
      cin >> a[i][j];
      t = 3 * a[i][j] + 2 * (m - i) + 1;
      if (t > y1) y1 = t;
    }
  for (i = 0; i < y1; i++)
    for (j = 0; j < x1; j++) s[i][j] = '.';
  for (i = 0; i < m; i++)
    for (j = 0; j < n; j++)
      for (k = 0; k < a[i][j]; k++) {
        x = 2 * (m - i - 1) + 4 * j;
        y = 2 * (m - i - 1) + 3 * k;
        hua(y, x);
      }
  for (i = y1 - 1; i >= 0; i--) {
    for (j = 0; j < x1; j++) cout << s[i][j];
    if (i > 0) {
      cout << endl;
    }
  }
  return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS土地利用数据制备、分析及基于FLUS模型土地利用预测实践技术应用

土地资源对人类至关重要&#xff0c;土地是人类赖以生存和发展的物质基础&#xff0c;是一切生产和一起存在的源泉。利用现代化的技术手段及时、准确地获取土地利用现状&#xff0c;以及充分认识土地利用和土地覆盖变化规律&#xff0c;能极大地提高制定土地利用规划的科学性和…

【Vue探索之旅】初识Vue

文章目录 前言 渐进式框架​ 入门案例 完结撒花 前言 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#x…

社区新零售:家门口的便利与温暖

社区新零售&#xff1a;家门口的便利与温暖 随着都市生活节奏的加快&#xff0c;人们对于便捷、高效的生活方式有了更高的追求。社区新零售&#xff0c;作为零售业的一股新兴力量&#xff0c;正以其独特的魅力&#xff0c;悄然改变着我们的日常生活。 家门口的便利 社区新零…

通过EXCEL控制PLC启停电机的一种方法

概述 本例将介绍用微软EXCEL电子表格控制西门子S7-1200 PLC实现电机启停的一种方法。 第1步&#xff1a; 添加PLC设备&#xff0c;选择西门子S7-1214C CPU&#xff0c;设置IP地址&#xff1a;192.168.18.18&#xff0c;子网掩码&#xff1a;255.255.255.0。 第2步&#xff1a…

低频量化日报(明日涨停预测,指数分位值,指数风险溢价比,配债数据集,可转债策略,可转债上市价格预测)...

低频量化日报&#xff08;2024-05-13&#xff09; 明日涨停预测指数分位值指数风险溢价比小规模配债<5亿可转债策略 双低策略四因子策略网格策略可转债上市价格预测 宏柏转债-111019最后 明日涨停预测 有能力和时间的同志可以参考这个指标。 关于封板强度的文章可以参考&…

angular13 自定义组件全项目都可用 自存

1.定义自定义组件 使用命令创建一个组件 但删除它在你的module里的声明&#xff0c;因为会报错只能引用一次 在本组件中创建一个module文件&#xff0c;引入刚才的组件component.ts import { NgModule } from angular/core; import { CommonModule } from angular/common; im…

秋招算法刷题10(栈和队列)

0509 232.用栈实现队列 class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack new ArrayDeque<Integer>();outStack new ArrayDeque<Integer>();}public void push(int x) {inStack.push(x);}public int pop…

Java数据类型:基本类型

Java是一种强类型语言&#xff0c;定义变量时&#xff0c;必须指定数据类型。 // 变量必须指定数据类型 private String username;初学者不免有个疑问&#xff1a;在实际编写代码的过程中&#xff0c;该如何选择数据类型呢&#xff1f; 回答这个问题之前&#xff0c;先来解决…

CSS 块状元素

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

DevOps 温故知新

【引】伴随着微服务架构以及云技术的广泛使用&#xff0c;DevOps相应地引起了人们的关注&#xff0c;尤其在互联网企业展开了大量的探索和实践。去年赋闲在家的时候&#xff0c; 有幸精读了三本书&#xff0c;分别是《持续架构实践——敏捷和DevOps时代下的软件架构》&#xff…

vue 运行项目node-scss报错

vue项目node版本与自己电脑node版本不一样运行node导致报错 node-sass模块对node版本有兼容性&#xff0c;版本不适配&#xff0c;就容易报错 解决方案&#xff1a; 在项目目录下打开cmd&#xff1a; 输入命令&#xff1a; npm rebuild node-sass 然后再更新一下&#xff1a;…

重生奇迹mu剑士职业

1、剑士转职条件&#xff1a; 首先等级需要达到150级&#xff0c;在冰风谷寻找NPC圣导士《赛维娜》开启第一次转职任务&#xff0c;转职步骤分为两步&#xff0c;每完成一个步骤同时奖励10点属性点。 2、第一阶段&#xff1a; 与NPC圣导师赛维娜对话接取任务 2.领取任务后击…

SpringBoot报空指针错:java.lang.NullPointerException

虽然报空指针错误的原因可能有很多种&#xff0c;但是我还是写上我的报错原因&#xff0c;以此与各位共勉~ 在这里提前说一句&#xff0c;AI虽然强大&#xff0c;但是还是要谨慎使用啊(血的教训)~ 这里先截图我错误的地方&#xff1a; 前端能成功传进来值&#xff0c;后台控制…

网络安全快速入门(九)MySQL进阶操作

上一章我们了解了对表及库的基本增删查改操作&#xff0c;本章我们针对增删查改内容进行与一些拓展&#xff0c; 9.1字段修饰及数据类型 我们之前在创建表时用到的格式为&#xff1a; create table 表名 ( 字段名1 字段数据类型&#xff08;数据类型长度&#xff09;, 字段名2 …

SpringAMQP 发布订阅-DirectExchange

DirectExchange: 路由模式模型 代码实现 直接通过注解方式绑定交换机和队列&#xff0c;这里边加了key也就是BingdingKey绑定key&#xff0c;可以看作交换机的路由规则&#xff0c;交换机收到消息后读取消息中指定的Routingkey发送到存有相应BingdingKey的队列中。 RabbitLis…

界面组件DevExpress Reporting中文教程 - 标记(可访问)PDF导出增强

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 可访问性支持在DevExpress这里仍然是一个高优先…

XR806开发板MQTT电源智能控制器

非常感谢这次极术社区,借助对Xr806开发板的试用&#xff0c;接触到了鸿蒙harmonyos&#xff0c;使用一定过程历时较长&#xff0c;也是一点点摸索&#xff0c;得到了很好学习机会。 社区里很多文章&#xff0c;感谢各位大佬的文章指点&#xff0c;本次试用主要是参考了两位大佬…

数据结构(二) 线性表

2024年5月13日一稿 线性表的定义与基本操作 数据类型相同(各个元素占用空间相同) 是有限序列 基操

武汉星起航:亚马逊店铺经营秘籍,揭秘提升点击率的关键策略

在竞争激烈的亚马逊电商平台上&#xff0c;提升点击率成为了每个卖家都渴望实现的目标。点击率不仅直接关系到商品的曝光度和销售量&#xff0c;更是衡量店铺经营效果的重要指标。那么&#xff0c;如何才能在众多商品中脱颖而出&#xff0c;吸引潜在买家的目光呢&#xff1f;武…

浏览器不兼容 replaceAll 方法问题解决

问题 在一些较旧版本的浏览器中可能会出现 replaceAll 方法不兼容&#xff0c;提示replaceAll 方法 undefined 的问题。浏览器版本兼容情况如下图所示&#xff1a; 解决 可以通过 replace 正则表达式 的方法来代替 replaceAll 方法&#xff1a; let str "我是一段文本…