69.撞球+

一天,丁俊晖编一整天的程序,突然觉得累了,于是便决定在房间内四处走走。他的房间是矩形的,他从电脑开始随便选了一个角度开始行走。由于职业习 惯,丁俊晖走路始终是直线,而且碰到墙以后会反弹,入射角度与出射角度完全相同。丁俊晖会一直行走,直到灵感再次迸发。假设他的行走速度是匀速的,现在, 丁俊晖的母亲想知道他一共休息了多长时间以便提醒他继续工作。

丁俊晖想考考他的母亲,于是他记录了自己碰到墙壁的序列并且告诉了她,你有没有办法能够帮助她计算出小丁所走的路程?

输入

输入包括多个测试用例,每个测试用例如下:
第一行包含两个数字 w, l(0<w, l<=1000),分别代表房间的宽度和长度;
第二行包括两个数字 x0, y0,代表电脑的位置坐标 (x0, y0);
第三行包含两个数字 x1, y1,代表丁俊晖的位置坐标 (x1, y1);
最后一行是一个包含'F', 'B', 'L', 'R'四种字符的字符串,分别代表墙在前面、后面、左边或是右边,字符串的长度小于等于 1000;
我们约定,左上角的坐标为0,0,所有的坐标都是浮点型数字。

输出

一个浮点型数字,代表总路

#include <stdio.h>
#include <math.h>
#define MAX 1005
int main()
{
	int width = 0, length = 0;//宽和长
	int x0 = 0, y0 = 0;//电脑的位置
	int x1 = 0, y1 = 0;//丁的位置
	char buf[MAX] = {0 };
	scanf("%d %d %d %d %d %d",&width,&length,&x0,&y0,&x1,&y1);
	getchar();
	gets(buf);
	int len = strlen(buf);
	for (int i = 0; i < len; i++)
	{
		char ch = buf[i];
		switch (ch)//利用坐标系,通过对称,变成求直线的距离的问题//建议自己画图理解理解
		{
		case 'F':
			y0 = -y0;
			break;
		case 'B':
			y0 = 2*length - y0;
			break;
		case 'L':
			x0 = -x0;
			break;
		case 'R':
			x0 = 2*width - x0;
			break;
		default:
			printf("error.\n");
		}
	}
	printf("%.4lf\n", sqrt(pow((double)(x0 - x1),2) + pow((double)(y0 - y1),2)));
	return 0;
}

程,结果精确到小数点后 4 位。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值