专栏首页小L的魔法馆HDU 6330--Visual Cube(构造,计算)

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

Visual Cube

  • 将这个立方体分块,分成上中下三个部分,利用长宽高计算行列,最后输出即可。 每个部分都分成奇偶行来输出,总共有2∗(b+c)+12∗(b+c)+12*(b+c)+1行,共2∗(a+b)+12∗(a+b)+12*(a+b)+1列。设当前行为iii,划分方式:当行数小于等于2∗b2∗b2*b时,在上部,当i>(2∗b)i>(2∗b)i > (2 * b) &&i<=2∗c+1i<=2∗c+1 i<=2*c+1时,在中部,其余在下部。这样的划分可以应对绝大部分情况,但是对于上部有一中情况是不包括的,当b>cb>cb>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;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • EM Algorithm

    EM算法和之前学的都不太一样,EM算法更多的是一种思想,所以后面用几个例子讲解,同时也会重点讲解GMM高斯混合模型。

    西红柿炒鸡蛋
  • iOS多线程研究(四)

    这里是一张高清无码大图,如果直接走下载,然后加载UI,整个程序就会有堵塞。 解决办法就是开启异步线程,进行下载,最后回到UI更新

    CC老师
  • KVC赋值取值过程分析

    前面我们简单使用了KVC, 发现KVC能够对私有的成员进行取值赋值, 那么KVC的赋值取值的过程是什么样的?了解下..

    CC老师
  • 网易云音乐为什么这么懂你?

    相信大家这几天的朋友圈已经被网易云音乐的年度听歌报告给刷屏了吧!不知道你们2018的年度关键词是什么,我的关键词是“青春”。

    谭庆波
  • BAT 经典算法笔试题 —— 逆转单向链表

    不善言谈的优秀程序员在面试中往往是要吃巨亏的,你没有办法通过说话来轻易证明自己的实力。不论是大厂还是小厂,大部分面试官都不具备优秀的面试能力,它们也只能通过三言...

    老钱
  • 数学原来这么有趣,66组超炫动图唤醒你的思维!

    无论怎样,看完这一组动图,你不仅能够感受到数学美丽的一面,同时也会对我们常见的公式定理有更深刻、直观的理解!

    华章科技
  • BAT 经典算法笔试题: 镜像二叉树

    再过不到 2 个月,互联网行业就要再次迎来面试高峰了。为了让大家能顺利通过所有面试环节必经的笔试阶段,我提前给大伙准备了一套常见的算法笔试题。这套算法题来源于 ...

    老钱
  • 来聊一聊 Spring 框架的前生今世

    这里的 Pivotal 团队肯定就是 Spring Boot 的研发团队了,那么这个 Pivotal 团队到底是个什么来头呢?和 Spring 又有那些关系?不...

    美码师
  • 鸿篇巨制 —— LevelDB 的整体架构

    本节信息量很大,我们要从整体上把握 LevelDB 这座大厦的结构。当我们熟悉了整体的结构,接下来就可以各个击破来细致了解它的各种微妙的细节了。

    老钱
  • 创业者注意了!大数据教你如何在众筹网站上成功融资

    有好点子,想创业,但没钱,怎么办?Kickstarter是美国著名的众筹网站,在这里可以帮有好点子的创业者实现梦想!本文数据侠抓取了Kickstarter的众筹...

    DT数据侠

扫码关注云+社区

领取腾讯云代金券