HDU 1033 Edge

17 篇文章 0 订阅
这道题有点让我费解
/*
2015年2月26日20:25:11
现在有一个固定初始坐标(300.420)的点,它按照一定的操作命令序列每向前走10个单位长度的距离就左转(V)或右转(A)<span style="color: rgb(54, 46, 43); font-family: Arial; font-size: 14px; line-height: 26px;">"A"代表顺时针,"V"代表逆时针</span>。现在要每个操作命令序列来输出这个点的轨迹(并遵循一定的格式)。

输入:每一行是一个实例。每行包含一个非空的长度不超过200的由A和V构成的字符串。以文件结束符表示输入结束。

输出:对于每个输入实例,以以下的例子作为输入标准。


以上图片代表两个实例:V和AVV

实例V的输出为:

300 420 moveto

310 420 lineto

310 430 lineto

stroke

showpage

实例AVV的输出为:

300 420 moveto

310 420 lineto

310 410 lineto

320 410 lineto

320 420 lineto

stroke

showpage
*/
# include <stdio.h>
# include <string.h>

int L=0,R=1,U=2,D=3;//代表左右上下4方向
int dir_A[]={U,D,R,L};//执行A右转操作时4个方向变为对应的UDRL方向  
int dir_V[]={D,U,L,R};//执行V左转操作时4个方向变为对应的DULR方向  
int dx[]={-10,10,0,0};//左右上下4方向对应的X坐标增量  
int dy[]={0,0,10,-10};//y增量  

int main(void)
{
	char str[200];
	while(scanf("%s",&str)!=EOF)
	{ 
		getchar();    //吸收回车符。
		int x = 310,y = 420; //初始坐标不能为(300,420)而是(310,420)
		int cur_dir = 1;//初始的方向始终向右  
		printf("300 420 moveto\n");
		printf("310 420 lineto\n");
		printf("str的长度:%d\n", strlen(str));
		for(int i = 0; i < strlen(str); i++)
		{
			char c = str[i];
			int new_dir;
			if(c == 'A')
			{
				new_dir = dir_A[cur_dir];  
				x+=dx[new_dir];//新方向X增量  
				y+=dy[new_dir];//新方向Y增量  
			}
			else
			{
				new_dir = dir_V[cur_dir];  
                x+=dx[new_dir];  
                y+=dy[new_dir];  
			}
		cur_dir = new_dir;//更新当前方向  
		printf("%d %d lineto\n", x, y);
		}
		printf("stroke\n");
		printf("showpage\n");
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值