zoj 2312

//昨天练习感觉很不错,把大二他们虐了。不是赢在时间上,而是赢在题量上。
//这道题我组是第一个解出来的,因此还让我们上台讲解题目。
//刚拿到这道题时根本没想,直接得出结论,这是一道很简单的模拟题。
//AC完之后听他们说这道题目很长,当时根本没想到。
//下面开始贴代码

#include<stdio.h>
#include<string.h>

#define MAXSIZE 80
char map[MAXSIZE][MAXSIZE];
int sizex,sizey;

void setpoint(int x,int y,char c){
	if(map[y][x]==' ')map[y][x]=c;
	else if(map[y][x]==c)return;
	else if((map[y][x]=='-'||map[y][x]=='+'||map[y][x]=='|')&&
		(c=='-'||c=='+'||c=='|'))map[y][x]='+';
	else if((map[y][x]=='/'||map[y][x]=='x'||map[y][x]=='\\')&&
		(c=='/'||c=='\\'||c=='x'))map[y][x]='x';
	else map[y][x]='*';
}
void line(void){
	int x1,x2,y1,y2,i;
	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
	if(x1==x2){
		if(y1>y2){
			i=y1;
			y1=y2;
			y2=i;
		}
		for(i=y1;i<=y2;++i)setpoint(x1,i,'|');
	}else if(y1==y2){
		if(x1>x2){
			i=x1;
			x1=x2;
			x2=i;
		}
		for(i=x1;i<=x2;++i)setpoint(i,y1,'-');
	}else if(x2-x1==y2-y1){
		if(x1>x2){
			i=x1;
			x1=x2;
			x2=i;
		}
		if(y1>y2){
			i=y1;
			y1=y2;
			y2=i;
		}
		while(x1<=x2){
			setpoint(x1,y1,'\\');
			++x1;++y1;
		}
	}else if(x2-x1+y2-y1==0){
		if(x1>x2){
			i=x1;
			x1=x2;
			x2=i;
		}
		if(y1>y2){
			i=y1;
			y1=y2;
			y2=i;
		}
		while(x1<=x2){
			setpoint(x1,y2,'/');
			++x1;--y2;
		}
	}
}
void point(void){
	int x,y;
	scanf("%d%d",&x,&y);
	setpoint(x,y,'o');
}
void text(void){
	int x,y,i;
	char str[1023];
	scanf("%d%d%s",&x,&y,str);
	for(i=0;str[i]&&i+x<=sizex;++i)setpoint(i+x,y,str[i]);
}
void clear(void){
	int x1,x2,y1,y2,i,j;
	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
	if(x1>x2){
		i=x1;
		x1=x2;
		x2=i;
	}
	if(y1>y2){
		i=y1;
		y1=y2;
		y2=i;
	}
	for(i=y1;i<=y2;++i)for(j=x1;j<=x2;++j)map[i][j]=' ';
}
void print(void){
	int i,j;
	printf("+");
	for(i=1;i<=sizex;++i)printf("-");
	printf("+\n");
	for(i=1;i<=sizey;++i){
		printf("|");
		for(j=1;j<=sizex;++j)putchar(map[i][j]);
		printf("|\n");
	}
	printf("+");
	for(i=1;i<=sizex;++i)printf("-");
	printf("+\n");
}
int main(){
	char str[255];
	int i,j,cas=0;
	//freopen("C:/Users/lenovo/Desktop/stdin.txt","r",stdin);
	//freopen("C:/Users/lenovo/Desktop/stdout.txt","w",stdout);
	while(2==scanf("%d%d",&sizex,&sizey) && sizex>0 && sizey>0){
		for(i=1;i<=sizey;++i)for(j=1;j<=sizex;++j)
			map[i][j]=' ';
		while(1){
			scanf("%s",str);
			if(strcmp(str,"LINE")==0)line();
			else if(strcmp(str,"POINT")==0)point();
			else if(strcmp(str,"TEXT")==0)text();
			else if(strcmp(str,"CLEAR")==0)clear();
			else if(strcmp(str,"PRINT")==0){
				print();
				break;
			}
		}
		printf("\n");
	}
	return 0;
}


原文地址:https://www.cnblogs.com/zhanhb/p/2005713.html