首页 > 代码库 > 立体图
立体图
题目描述
小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容。最近,他准备给小朋友们讲解立体图,请你帮他画出立体图。
小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每个格子上堆了一些同样大小的积木(积木的长宽高都是1),小渊想请你打印出这些格子的立体图。我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以这一种形式摆放:
每个顶点用1个加号’+’表示,长用3个”-”表示,宽用1个”/”,高用两个”|”表示。字符’+’,”-”,”/”,”|”的ASCII码分别为43,45,47,124。字符’.’(ASCII码46)需要作为背景输出,即立体图里的空白部分需要用’.’来代替。立体图的画法如下面的规则:
若两块积木左右相邻,图示为:
若两块积木上下相邻,图示为:
若两块积木前后相邻,图示为:
立体图中,定义位于第(m,1)的格子(即第m行第1列的格子)上面自底向上的第一块积木(即最下面的一块积木)的左下角顶点为整张图最左下角的点。
输入输出格式
输入格式:
输入文件drawing.in第一行有用空格隔开的2个整数m和n,表示有m*n个格子(1<=m,n<=50)。
接下来的m行,是一个m*n的矩阵,每行有n个用空格隔开的整数,其中第i行第j列上的整数表示第i行第j列的个子上摞有多少个积木(1<=每个格子上的积木数<=100)。
输出格式:
输出文件drawing.out中包含题目要求的立体图,是一个K行L列的字符串矩阵,其中K和L表示最少需要K行L列才能按规定输出立体图。
输入输出样例
输入样例#1:
3 4 2 2 1 2 2 2 1 1 3 2 1 2
输出样例#1:
......+---+---+...+---+ ..+---+ / /|../ /| ./ /|-+---+ |.+---+ | +---+ |/ /| +-| | + | | +---+ |/+---+ |/| | |/ /| +/ /|-+ | +---+---+ |/+---+ |/| + | | | +-| | + |/. | | |/ | |/| +.. +---+---+---+---+ |/... | | | | | +.... | | | | |/..... +---+---+---+---+......
说明
NOIP2008普及组第四题
代码实现:
1 #include<cstdio> 2 int m,n,a,h,l; 3 char t[3000][3000]; 4 void coated(int x,int y){ 5 t[x][y]=‘+‘,t[x][y+1]=‘-‘,t[x][y+2]=‘-‘,t[x][y+3]=‘-‘,t[x][y+4]=‘+‘;x++; 6 t[x][y]=‘|‘,t[x][y+1]=‘ ‘,t[x][y+2]=‘ ‘,t[x][y+3]=‘ ‘,t[x][y+4]=‘|‘,t[x][y+5]=‘/‘;x++; 7 t[x][y]=‘|‘,t[x][y+1]=‘ ‘,t[x][y+2]=‘ ‘,t[x][y+3]=‘ ‘,t[x][y+4]=‘|‘,t[x][y+5]=‘ ‘,t[x][y+6]=‘+‘;x++; 8 t[x][y]=‘+‘,t[x][y+1]=‘-‘,t[x][y+2]=‘-‘,t[x][y+3]=‘-‘,t[x][y+4]=‘+‘,t[x][y+5]=‘ ‘,t[x][y+6]=‘|‘;x++; 9 t[x][y+1]=‘/‘,t[x][y+2]=‘ ‘,t[x][y+3]=‘ ‘,t[x][y+4]=‘ ‘,t[x][y+5]=‘/‘,t[x][y+6]=‘|‘;x++; 10 t[x][y+2]=‘+‘,t[x][y+3]=‘-‘,t[x][y+4]=‘-‘,t[x][y+5]=‘-‘,t[x][y+6]=‘+‘; 11 } 12 int main(){ 13 scanf("%d%d",&m,&n); 14 for(int i=1;i<=m;i++){ 15 for(int j=1;j<=n;j++){ 16 scanf("%d",&a); 17 if(((m-i)*2+a*3+2)>h) h=(m-i)*2+a*3+2; 18 if(((m-i)*2+(j-1)*4+6)>l) l=(m-i)*2+(j-1)*4+6; 19 for(int k=1;k<=a;k++){ 20 coated((m-i)*2+(k-1)*3,(m-i)*2+(j-1)*4); 21 } 22 } 23 } 24 for(int i=h;i>=0;i--){ 25 for(int j=0;j<=l;j++){ 26 if(t[i][j]) printf("%c",t[i][j]); 27 else printf("."); 28 } 29 printf("\n"); 30 } 31 return 0; 32 }
新的覆盖旧的即可。
立体图
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。