撞球问题 大家来瞧一瞧看一看喽

时间:2022-03-11 14:11:15
这是我们学校的题 我们老师好有创意啊 把丁俊晖都黑了 呵呵。。。
题目:

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

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

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

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

下面是我的代码,目前只发现的问题是输出结果是个奇形怪状的样子的。希望有人解释并解决一下我的问题!!! 撞球问题 大家来瞧一瞧看一看喽
#include <stdio.h>
#include <math.h>
int main()
{
    int i;
    double w,l,x0,y0,x1,y1,s;
    char fbl[1000];
    scanf("%f %f",&w,&l);
    scanf("%f %f",&x0,&y0);
    scanf("%f %f",&x1,&y1);
    scanf("%s",&fbl);
    for(i=0;fbl[i]!='\0';i++)
    {
        if(fbl[i]=='F')
            y0=-y0;
        if(fbl[i]=='L')
            x0=-x0;
        if(fbl[i]=='B')
            y0=2*l-y0;
        if(fbl[i]=='R')
            x0=2*w-x0;
    }
    s=sqrt(pow(x0-x1,2)+pow(y0-y1,2));
    printf("%.4f",s);
}

8 个解决方案

#1


显然沉贴了,接分了

#2


撞球问题 大家来瞧一瞧看一看喽

#3


丁俊晖的母亲想知道他一共休息了多长时间以便提醒他继续工作。
丁俊晖想考考他的母亲,于是他记录了自己碰到墙壁的序列并且告诉了她.
撞球问题 大家来瞧一瞧看一看喽撞球问题 大家来瞧一瞧看一看喽

#4


引用 1 楼 Soiol 的回复:
显然沉贴了,接分了
想要吗?做梦吧 哈哈
除非你把题给我做出来

#5


#include <stdio.h>
#include <math.h>
int main()
{
    int i;
    double w,l,x0,y0,x1,y1,s;
    char fbl[1001];
    scanf("%lf %lf",&w,&l);
    scanf("%lf %lf",&x0,&y0);
    scanf("%lf %lf",&x1,&y1);
    scanf("%s",&fbl);
    for(i=0;fbl[i]!='\0';i++)
    {
        if(fbl[i]=='F')
            y0=-y0;
        if(fbl[i]=='L')
            x0=-x0;
        if(fbl[i]=='B')
            y0=2*l-y0;
        if(fbl[i]=='R')
            x0=2*w-x0;
    }
    s=sqrt(pow(x0-x1,2)+pow(y0-y1,2));
    printf("%.4lf\n",s);
return 0;
}
1、输入输出格式有误;
2、中间那些值不能用float类型。

#6


恩了解了 原来是这么个错误 
谢谢

#7


引用 4 楼 u010656539 的回复:
Quote: 引用 1 楼 Soiol 的回复:

显然沉贴了,接分了
想要吗?做梦吧 哈哈
除非你把题给我做出来

额,我不是这个意思,我看到你题目的叙述,一下就傻了,我说的接分是说回帖会得到10分...你不用这样嘲笑我吧

#8


代码功能不是被人看出来的;而是被单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中分析出来的。

单步调试和设断点调试是程序员必须掌握的技能之一。

#1


显然沉贴了,接分了

#2


撞球问题 大家来瞧一瞧看一看喽

#3


丁俊晖的母亲想知道他一共休息了多长时间以便提醒他继续工作。
丁俊晖想考考他的母亲,于是他记录了自己碰到墙壁的序列并且告诉了她.
撞球问题 大家来瞧一瞧看一看喽撞球问题 大家来瞧一瞧看一看喽

#4


引用 1 楼 Soiol 的回复:
显然沉贴了,接分了
想要吗?做梦吧 哈哈
除非你把题给我做出来

#5


#include <stdio.h>
#include <math.h>
int main()
{
    int i;
    double w,l,x0,y0,x1,y1,s;
    char fbl[1001];
    scanf("%lf %lf",&w,&l);
    scanf("%lf %lf",&x0,&y0);
    scanf("%lf %lf",&x1,&y1);
    scanf("%s",&fbl);
    for(i=0;fbl[i]!='\0';i++)
    {
        if(fbl[i]=='F')
            y0=-y0;
        if(fbl[i]=='L')
            x0=-x0;
        if(fbl[i]=='B')
            y0=2*l-y0;
        if(fbl[i]=='R')
            x0=2*w-x0;
    }
    s=sqrt(pow(x0-x1,2)+pow(y0-y1,2));
    printf("%.4lf\n",s);
return 0;
}
1、输入输出格式有误;
2、中间那些值不能用float类型。

#6


恩了解了 原来是这么个错误 
谢谢

#7


引用 4 楼 u010656539 的回复:
Quote: 引用 1 楼 Soiol 的回复:

显然沉贴了,接分了
想要吗?做梦吧 哈哈
除非你把题给我做出来

额,我不是这个意思,我看到你题目的叙述,一下就傻了,我说的接分是说回帖会得到10分...你不用这样嘲笑我吧

#8


代码功能不是被人看出来的;而是被单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中分析出来的。

单步调试和设断点调试是程序员必须掌握的技能之一。