撞球

荒凉一梦 提交于 2020-01-04 14:39:56

撞球

题目描述:

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

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

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

输出:
一个浮点型数字,代表总路程,结果精确到小数点后 4 位。

输入1

10 209 111 9↵
FLRLRB↵

输出1

63.7809

输入2

11 228 122 10↵
FLRLRB↵

输出2

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

int w,l;
int x_0,y_0;
int x_1,y_1;
char stackFB[1005];
int pFB;
char stackLR[1005];
int pLR;
char input[1005];
int len;
int wt,lt;
double st;
int FBon,LRon;

int main(){
	scanf("%d%d",&w,&l);
	scanf("%d%d",&x_0,&y_0);
	scanf("%d%d",&x_1,&y_1);
	scanf("%s",input);
	len=strlen(input);
	for(int i=0;i<len;i++){
		switch(input[i]){
			case 'F': stackFB[pFB++]='F';FBon=1;break;
			case 'B': stackFB[pFB++]='B';FBon=1;break;
			case 'L': stackLR[pLR++]='L';LRon=1;break;
			case 'R': stackLR[pLR++]='R';LRon=1;break;
		}
	}
	pFB--;pLR--;
	if(FBon){
		lt=pFB*l;
		lt+=(stackFB[0]=='F')?y_0:l-y_0;
		lt+=(stackFB[pFB]=='F')?y_1:l-y_1;
	}else{
		lt=abs(y_0-y_1);
	}
	if(LRon){
		wt=pLR*w;
		wt+=(stackLR[0]=='L')?x_0:w-x_0;
		wt+=(stackLR[pFB]=='L')?x_1:w-x_1;
	}else{
		wt=abs(x_0-x_1);
	}
	st=lt*lt+wt*wt;
	st=sqrt(st);
	printf("%.4f\n",st);
	return 0;
}
	

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!