HDU 6330 Problem L. Visual Cube---(模拟) 2018 Multi-University Training Contest 3

我是比较讨厌写模拟题的,场上交给队友了,自己没有写,想了想还是补补把=-=。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6330

题意:给你三个值,x,y,z,分别代表,长方体的长宽高。让你打印这个图形。

题解:模拟一下就过了,没什么难度。

#include<bits/stdc++.h>
using namespace std;
char a[100][100];
int main(){
    int z;
    cin >> z;
    while(z--){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        int n = 2*y + (2*z+1);int m = y*2 + (x*2+1);
        for(int i = 0 ; i <= 100 ; i ++)
        	for(int j = 0 ; j <= 100 ; j ++)
        		a[i][j] = '.';
        for(int i = 1 ; i <= 2*y ; i ++){
        	if(i&1){
        		for(int j = m - i+1 ; j >= m - x*2+1 - i; j -- ){
        			if(j&1)
        				a[i][j] = '+';
        			else 
        				a[i][j] = '-';
				}
			}
			else {
				for(int j = m - i+1 ; j >= m - x*2+1 - i; j -- ){
        			if(j&1)
        				continue;
        			else 
        				a[i][j] = '/';
				}
			}
		}
		for(int i = 2*y + 1 ; i <= n ; i ++){
			if(i&1){
        		for(int j = 1 ; j <= x*2+1; j ++ ){
        			if(j&1)
        				a[i][j] = '+';
        			else 
        				a[i][j] = '-';
				}
			}
			else {
				for(int j = 1 ; j <= x*2+1; j ++ ){
        			if(!(j&1))
        				continue;
        			else 
        				a[i][j] = '|';
				}
			}
		}
		int cnt = 0;
		for(int i = m ; i >= m - 2*y  +1; i --){
        	if(i&1){
        		for(int j = 1+cnt ; j <= 2*z +1+ cnt; j ++ ){
        			if(j&1)
        				a[j][i] = '+';
        			else 
        				a[j][i] = '|';
				}
			}
			else {
				for(int j = 1 +cnt; j <= 2*z + 1 +cnt; j ++ ){
        			if(j&1)
        				continue;
        			else 
        				a[j][i] = '/';
				}
			}
			cnt++;
		}
		for(int i = 1 ; i <= n ; i ++){
			for(int j = 1; j <= m ; j ++)
				cout << a[i][j] ;
			cout << endl;
		}
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/PK__PK/article/details/81301905