L - Problem L. Visual Cube HDU - 6330
### 思路
按要求打印方块
注意考虑边界棱的问题
宽和高的差值可能为负数(这里分了b-c>=0和b-c< 0两种情况,分开画)
### 代码
1 #include <bits/stdc++.h> 2 #include <iostream> 3 #include <cstring> 4 #include <stack> 5 #include <cstdlib> 6 #include <queue> 7 #include <cmath> 8 #include <cstdio> 9 #include <algorithm> 10 #include <string> 11 #include <vector> 12 #include <list> 13 #include <iterator> 14 #include <set> 15 #include <map> 16 #include <utility> 17 #include <iomanip> 18 #include <ctime> 19 #include <sstream> 20 #include <bitset> 21 #include <deque> 22 #include <limits> 23 #include <numeric> 24 #include <functional> 25 26 #define gc getchar() 27 #define mem(a) memset(a,0,sizeof(a)) 28 #define mod 1000000007 29 #define sort(a,n,int) sort(a,a+n,less<int>()) 30 #define fread() freopen("in.in","r",stdin) 31 #define fwrite() freopen("out.out","w",stdout) 32 using namespace std; 33 34 typedef long long ll; 35 typedef char ch; 36 typedef double db; 37 38 const int maxn=1e5+10; 39 //ll a[maxn]; 40 int aa[maxn]; 41 42 int main() 43 { 44 int t; 45 cin>>t; 46 while(t--) 47 { 48 int a , b , c; 49 cin>>a>>b>>c; 50 if(c>b) 51 { 52 53 for(int i = 0;i<2*b;i++) 54 { 55 for(int j = 0;j<2*b-i;j++) 56 cout<<'.'; 57 if(i%2) 58 { 59 for(int j = 0;j <a;j++) 60 { 61 cout<<"/."; 62 } 63 cout<<'/'; 64 } 65 else 66 { 67 for(int j = 0;j <a;j++) 68 { 69 cout<<"+-"; 70 } 71 cout<<'+'; 72 } 73 for(int j = 0;j<i/2;j++) 74 { 75 if(i%2) 76 cout<<"|/"; 77 else 78 cout<<".+"; 79 } 80 if(i%2) 81 cout<<'|'; 82 83 cout<<endl; 84 } 85 for(int i = 0;i<(c-b)*2;i++) 86 { 87 if(i%2) 88 { 89 for(int j = 0;j<a;j++) 90 cout<<"|."; 91 cout<<'|'; 92 for(int j = 0;j<b;j++) 93 cout<<"/|"; 94 } 95 else 96 { 97 for(int j = 0;j<a;j++) 98 cout<<"+-"; 99 cout<<'+'; 100 for(int j = 0;j<b;j++) 101 cout<<".+"; 102 } 103 cout<<endl; 104 } 105 for(int i = 0;i<2*b+1;i++) 106 { 107 if(i%2) 108 { 109 for(int j = 0;j<a;j++) 110 cout<<"|."; 111 cout<<'|'; 112 for(int j = 0;j<(2*b-i-1)/2;j++) 113 cout<<"/|"; 114 cout<<'/'; 115 } 116 else 117 { 118 for(int j = 0;j<a;j++) 119 cout<<"+-"; 120 cout<<'+'; 121 for(int j = 0;j<(2*b-i)/2;j++) 122 cout<<".+"; 123 } 124 for(int j = 0;j<i;j++) 125 cout<<'.'; 126 cout<<endl; 127 } 128 129 } 130 else 131 { 132 133 for(int i = 0;i<2*c;i++) 134 { 135 for(int j = 0;j<2*b-i;j++) 136 cout<<'.'; 137 if(i%2) 138 { 139 for(int j = 0;j <a;j++) 140 { 141 cout<<"/."; 142 } 143 for(int j = 0;j <i/2+1;j++) 144 { 145 cout<<"/|"; 146 } 147 } 148 else 149 { 150 for(int j = 0;j <a;j++) 151 { 152 cout<<"+-"; 153 } 154 cout<<'+'; 155 for(int j = 0;j <i/2;j++) 156 { 157 cout<<".+"; 158 } 159 } 160 cout<<endl; 161 } 162 for(int i = 0;i<(b-c)*2;i++) 163 { 164 for(int j = 2*c;j<2*b-i;j++) 165 cout<<'.'; 166 if(i%2) 167 { 168 for(int j = 0;j <a;j++) 169 { 170 cout<<"/."; 171 } 172 for(int j = 0;j <c;j++) 173 { 174 cout<<"/|"; 175 } 176 cout<<'/'; 177 } 178 else 179 { 180 for(int j = 0;j <a;j++) 181 { 182 cout<<"+-"; 183 } 184 cout<<'+'; 185 for(int j = 0;j <c;j++) 186 { 187 cout<<".+"; 188 } 189 } 190 for(int j = 0;j<i;j++) 191 { 192 cout<<'.'; 193 } 194 cout<<endl; 195 } 196 for(int i = 0;i<2*c+1;i++) 197 { 198 if(i%2) 199 { 200 for(int j = 0;j <a;j++) 201 { 202 cout<<"|."; 203 } 204 cout<<'|'; 205 for(int j = 0;j <(2*c-i)/2;j++) 206 { 207 cout<<"/|"; 208 } 209 cout<<'/'; 210 } 211 else 212 { 213 for(int j = 0;j <a;j++) 214 { 215 cout<<"+-"; 216 } 217 cout<<'+'; 218 for(int j = 0;j <(2*c-i)/2;j++) 219 { 220 cout<<".+"; 221 } 222 } 223 for(int j = 0;j<2*b-2*c+i;j++) 224 cout<<'.'; 225 226 cout<<endl; 227 } 228 229 } 230 } 231 }