您的位置:首页 > 其它

UVa 10800 - Not That Kind of Graph

2015-09-24 19:16 841 查看
題目:給你三個字母組成的序列繪製一個字符圖片,包括坐標軸;

R(繪製‘/’,光標右上移動),F(光標右下移動,繪製'\'),C(繪製'-'光標右移)。

分析:模擬。在一個105*55的底板上繪製,然後打印輸出。

1.圖像上面到達上界,下面到達坐標軸;

2.y軸和圖像,圖像和右邊界各有一行空餘;

3.每行結尾不能有多餘空格;

4.圖像結束后有一行空行。

說明:注意輸出格式。

#include <cstring>
#include <cstdio>

char buf[55];
char maps[105][55];

int main()
{
	int n;
	while (~scanf("%d",&n)) 
	for (int k = 1; k <= n; ++ k) {
		scanf("%s",buf);
		
		//绘制底板 
		memset(maps, 0, sizeof(maps));
		int max = 50, min = 52, now = 51, len = 0;
		for (int i = 0; buf[i]; ++ i) {
			if (buf[i] == 'F') maps[-- now][i+2] = '\\';
			if (min > now) min = now;
			if (buf[i] == 'C') maps[now][i+2] = '_';
			if (max < now) max = now;			
			if (buf[i] == 'R') maps[now ++][i+2] = '/';
			len = i+3;	
		}
		
		//绘制坐标轴 
		maps[min-1][0] = '+';
		for (int i = 1; i <= len; ++ i)
			maps[min-1][i] = '-';
			
		//填充底板 
		for (int i = min; i <= max; ++ i) {
			maps[i][0] = '|';
			int move = len;
			while (!maps[i][move]) -- move;
			while (-- move > 0)
				if (!maps[i][move])
					maps[i][move] = ' ';
		}
		
		//打印输出 
		printf("Case #%d:\n",k);
		for (int i = max; i >= min-1; -- i)
			puts(maps[i]);
		puts("");
	}
	
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: