博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 6330--Visual Cube(构造,计算)
阅读量:4868 次
发布时间:2019-06-11

本文共 4334 字,大约阅读时间需要 14 分钟。

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

你可能感兴趣的文章
通过sohu获取浏览器端IP地址
查看>>
股票数据处理
查看>>
div距离左边设置
查看>>
Android引用多媒体
查看>>
Android尺寸适配问题
查看>>
Android-Widget桌面小组件
查看>>
Android API文档
查看>>
AppCan调试问题
查看>>
AppCan模拟器调试
查看>>
JavaScript更改css样式
查看>>
按钮控制示例
查看>>
JavaScript处理股票数据
查看>>
新浪JavaScript库
查看>>
销毁定时器
查看>>
phpredis中文文档 [转]
查看>>
Linux MySQL基础
查看>>
常用JS验证
查看>>
基本算法个人PHP 实现(一)
查看>>
数据库三范式
查看>>
如何将 NavigationBar 的半透明效果关闭?
查看>>