就是由远及近地渲染,使用此代码满分
#include<bits/stdc++.h>
using namespace std;
char s[2048][2048];
int main(int argc,char **argv){
int m,n,max=-20;
cin>>m>>n;
int a[m][n];
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>a[i-1][j-1];
if(a[i-1][j-1]*3+3+(m-i)*2-1>max) {max=a[i-1][j-1]*3+3+(m-i)*2-1;}
for(int k=0;k<a[i-1][j-1];k++){
//可见的7个顶点:
s[k*3+(m-i)*2][j*4 +(m-i)*2]='+';//左下
s[k*3+(m-i)*2][j*4+4 +(m-i)*2]='+';//右下
s[k*3+(m-i)*2+3][j*4 +(m-i)*2]='+';//左上
s[k*3+(m-i)*2+3][j*4+4 +(m-i)*2]='+';//右上
s[k*3+(m-i)*2+2][j*4+6 +(m-i)*2]='+';//后右下
s[k*3+(m-i)*2+5][j*4+2 +(m-i)*2]='+';//后左上
s[k*3+(m-i)*2+5][j*4+6 +(m-i)*2]='+';//后右上
//画竖着的三条棱(|)
s[k*3+(m-i)*2+1][j*4 +(m-i)*2]='|';//左
s[k*3+(m-i)*2+2][j*4 +(m-i)*2]='|';//左
s[k*3+(m-i)*2+1][j*4+4 +(m-i)*2]='|';//右
s[k*3+(m-i)*2+2][j*4+4 +(m-i)*2]='|';//右
s[k*3+(m-i)*2+3][j*4+6 +(m-i)*2]='|';//后
s[k*3+(m-i)*2+4][j*4+6 +(m-i)*2]='|';//后
//画横着的三条棱(-)
s[k*3+(m-i)*2][j*4+1 +(m-i)*2]='-';//下
s[k*3+(m-i)*2][j*4+2 +(m-i)*2]='-';//下
s[k*3+(m-i)*2][j*4+3 +(m-i)*2]='-';//下
s[k*3+(m-i)*2+3][j*4+1 +(m-i)*2]='-';//上
s[k*3+(m-i)*2+3][j*4+2 +(m-i)*2]='-';//上
s[k*3+(m-i)*2+3][j*4+3 +(m-i)*2]='-';//上
s[k*3+(m-i)*2+5][j*4+3 +(m-i)*2]='-';//后
s[k*3+(m-i)*2+5][j*4+4 +(m-i)*2]='-';//后
s[k*3+(m-i)*2+5][j*4+5 +(m-i)*2]='-';//后
//画斜着的三条棱(/)
s[k*3+(m-i)*2+4][j*4+1 +(m-i)*2]='/';//下
s[k*3+(m-i)*2+4][j*4+5 +(m-i)*2]='/';//右
s[k*3+(m-i)*2+1][j*4+5 +(m-i)*2]='/';//右
//填充:长3宽2,' '
s[k*3+(m-i)*2 +1][j*4+1 +(m-i)*2]=' ';//前面
s[k*3+(m-i)*2 +1][j*4+2 +(m-i)*2]=' ';//前面
s[k*3+(m-i)*2 +1][j*4+3 +(m-i)*2]=' ';//前面
s[k*3+(m-i)*2 +2][j*4+1 +(m-i)*2]=' ';//前面
s[k*3+(m-i)*2 +2][j*4+2 +(m-i)*2]=' ';//前面
s[k*3+(m-i)*2 +2][j*4+3 +(m-i)*2]=' ';//前面
s[k*3+(m-i)*2 +4][j*4+2 +(m-i)*2]=' ';//上面
s[k*3+(m-i)*2 +4][j*4+3 +(m-i)*2]=' ';//上面
s[k*3+(m-i)*2 +4][j*4+4 +(m-i)*2]=' ';//上面
s[k*3+(m-i)*2 +2][j*4+5 +(m-i)*2]=' ';//右面
s[k*3+(m-i)*2 +3][j*4+5 +(m-i)*2]=' ';//右面
}
}
}
for(int i=max;i>=0;i--){
for(int j=4;j<4+m*2+n*4+1;j++){
if(s[i][j]!='\0'){
cout<<s[i][j];
}else{
cout<<'.';
}
}
printf("\n");
}
return(0);
}