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

HDU 6330--Visual Cube(构造,计算)

Visual Cube

  • 将这个立方体分块,分成上中下三个部分,利用长宽高计算行列,最后输出即可。
    每个部分都分成奇偶行来输出,总共有\(2*(b+c)+1\)行,共\(2*(a+b)+1\)列。设当前行为\(i\),划分方式:当行数小于等于\(2*b\)时,在上部,当$i > (2 * b) $ && \(i<=2*c+1\)时,在中部,其余在下部。这样的划分可以应对绝大部分情况,但是对于上部有一中情况是不包括的,当$b>c $时,如果继续之前的划分,那么在头部判定之后,它依然符合下部的判定,所以这时也被当作下部输出,这不是预期的结果,所以在上部加上额外的判定。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
int main(void) {
    int t, a, b, c;
    cin >> t;
    while (t-- > 0) {
        cin >> a >> b >> c;
        for (int i = 1; i <= (2 * (b + c) + 1); i++) {
            //if (i != 1)cout << endl;
            //head
            if (i % 2 == 1 && i <= (2 * b)) {
                for (int j = 1; j <= 2*(b-i/2); j++) {
                    cout << ".";
                }
                for (int j = 2 * (b - i / 2) + 1; j <= 2 * (b - i / 2) + a * 2; j+=2) {
                    cout << "+-";
                }
                cout << "+";
                if (b < c || i <= (2 * c + 1)) {
                    for (int j = 2 * (b - i / 2) + a * 2 + 2; j <= 2 * (a + b) + 1; j += 2) {
                        cout << ".+";
                    }
                }
                else
                {
                    cout << ".";
                    for (int j = 1; j <= c; j++) {
                        cout << "+.";
                    }
                    for (int j = 2 * (b - i / 2) + a * 2 + 2*c+3; j <= 2 * (a + b) + 1; j++) {
                        cout << ".";
                    }
                }
                cout << endl;
                continue;
            }
            if (i % 2 == 0 && i <= (2 * b)) {
                for (int j = 1; j <= 2 * (b - i / 2)+1; j++) {
                    cout << ".";
                }
                for (int j = 2 * (b - i / 2) + 1; j <= 2 * (b - i / 2) + a * 2; j += 2) {
                    cout << "/.";
                }
                if (b < c ||i<=(2*c+1)) {
                    for (int j = 2 * (b - i / 2) + a * 2 + 2; j <= 2 * (a + b) + 1; j += 2) {
                        cout << "/|";
                    }
                }
                else
                {
                    cout << "/";
                    for(int j=1;j<=c;j++){
                        cout << "|/";
                    }
                    for (int j = 2 * (b - i / 2) + a * 2+2*c+3; j <= 2 * (a + b) + 1; j++) {
                        cout << ".";
                    }
                }
                cout << endl;
                continue;
            }
            //middle
            if (i % 2 == 1 && i > (2 * b)&& i<=2*c+1) {
                for (int j = 1; j <= 2 * a; j+=2) {
                    cout << "+-";
                }
                cout << "+";
                for (int j = 2 * (a+1); j <= 2 * (a + b) + 1; j += 2) {
                    cout << ".+";
                }
                cout << endl;
                continue;
            }
            if (i % 2 == 0 && i > (2 * b) && i <= 2 * c + 1) {
                for (int j = 1; j <= 2 * a; j+=2) {
                    cout << "|.";
                }
                cout << "|";
                for (int j = 2 * (a + 1); j <= 2 * (a + b) + 1; j += 2) {
                    cout << "/|";
                }
                cout << endl;
                continue;
            }
            //bottom
            if (i % 2 == 1 && i > (2 * c + 1)) {
                for (int j = 1; j <= 2 * a; j+=2) {
                    cout << "+-";
                }
                cout << "+";
                int k = (2 * (c + b) + 1 - i) / 2+1;
                for (int j = 1; j <= k-1; j++) {
                    cout << ".+";
                }
                for (int j = 2 * a + 1 + 2 * k; j <= 2 * (a + b) + 2; j++) {
                    cout << ".";
                }
                cout << endl;
                continue;
            }
            if (i % 2 == 0 && i > (2 * c + 1)) {
                for (int j = 1; j <= 2 * a; j+=2) {
                    cout << "|.";
                }
                int k = (2 * (c + b) + 1 - i) / 2+1;
                for (int j = 1; j <= k; j++) {
                    cout << "|/";
                }
                for (int j = 2 * a + 1 + 2 * k; j <= 2 * (a + b) + 1; j++) {
                    cout << ".";
                }
                cout << endl;
                continue;
            }
        }
    }
    return 0;
}

转载于:https://www.cnblogs.com/FlyerBird/p/9403338.html

相关文章:

  • mysql 数据库修改名字
  • 设计模式-简单工厂、工厂方法模式、抽象工厂模式详解
  • 9种数据分析方法
  • 人群估值一般性算法
  • oracle获取过去两年的今天时间
  • SOFATracer 中 Disruptor 实践
  • C#抽象类与接口的区别【转】
  • 区块链时代的拜占庭容错:Tendermint(一)
  • 一致性算法Hash(Consistent Hashing)
  • Java 多线程
  • 微信小程序登录JAVA后台
  • yii2.0 验证码
  • Weakpass
  • MySQL基础知识之DDL操作
  • ubuntu LNMP nginx 隐藏index.php 配置文件
  • Android优雅地处理按钮重复点击
  • ECMAScript入门(七)--Module语法
  • Fabric架构演变之路
  • javascript 哈希表
  • LintCode 31. partitionArray 数组划分
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Ruby 2.x 源代码分析:扩展 概述
  • Unix命令
  • use Google search engine
  • Vim Clutch | 面向脚踏板编程……
  • Vue官网教程学习过程中值得记录的一些事情
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 聊聊flink的TableFactory
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 如何学习JavaEE,项目又该如何做?
  • 探索 JS 中的模块化
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # 达梦数据库知识点
  • # 飞书APP集成平台-数字化落地
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #QT(智能家居界面-界面切换)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $.ajax()
  • (2)STM32单片机上位机
  • (23)Linux的软硬连接
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (c语言)strcpy函数用法
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (六)软件测试分工
  • (译) 函数式 JS #1:简介
  • (转)平衡树
  • .htaccess 强制https 单独排除某个目录
  • .Net MVC4 上传大文件,并保存表单
  • .Net mvc总结
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)