• 趣味两题-(简单追及问题、两直线相交问题)


    问题 F: 逃出湖心(数学题)

    时间限制: 1 Sec  内存限制: 32 MB
    提交: 65  解决: 20
    [提交][状态][讨论版]

    题目描述

    一日,话说0068与***泛舟湖上。忽见岸边出现他的一大敌人elnil。0068当然不想落入elnil的魔爪,于是他就得想办法逃脱。

    这个湖是一个很规则的圆形,半径为R。此时0068正好在圆心位置。小船在湖中的速度为 V1,0068和elnil在岸上的速度都为V2。也就是说,如果0068在刚上岸的时候没被抓到,则他可逃脱。在任意时刻,0068和elnil都可以朝任何方向移动,但是0068不能一直呆上船上(会饿死的),elnil不能下水(他不会游泳)。假设0068和elnil都非常聪明,总能做对自己最有利的事情,而且两个人的体力都是无限的。

    请问,0068最终能不能逃脱elnil的魔爪?

    输入

    本题目包含多组测试。请处理到文件结束。
    每组测试包含三个整数,R,V1,V2。

    输出

    对于每组数据,如果0068能够安全逃脱,输出Yes,否则输出No。
    数据不会出现正好抓到的情况,所以你可不用太考虑临界点。

    样例输入

    100 10 20

    100 10 50

    样例输出

    Yes

    No

     

    解题思路:

      人一开始在圆心,怪物在岸上

      人若要成功脱离,就得找到从水中成功上岸的最短距离

      现在,人在圆心,怪物在B点,A点为B点相对于圆心的对称点

      那么人如果此时向A点运动,怪物B便绕园做圆周运动

      但此种方法并非人从水中成功上岸的最短距离。

      设想,当人从圆心往岸边运动,直到人的角速度Ω人=Ω怪物时,假设人此时在C点

      那么此时人和怪物作角速度相同的圆周运动

      但当,人的速度快了那么一点点的时候,此时

      人到了C点关于原点的对称点,怪物在B点

      那么此时人只要往A点运动 便是人从水中成功上岸的最短距离。

      

     

    代码便是:

     1 #include <stdio.h>
     2 #define PI 3.1415926
     3 
     4 int main()
     5 {
     6     float r,v1,v2,t1,t2,rr;
     7     while(scanf("%d%d%d",&r,&v1,&v2)!=EOF)
     8     {
     9         rr=v1*r/v2;
    10         t1=(r-rr)/v1;
    11         t2=(PI*r)/v2;
    12         
    13         if(t1<t2)
    14             printf("Yes
    ");
    15         else
    16             printf("No
    ");
    17     }
    18     return 0;
    19 }

    问题 B: 香蕉还是相交?

    时间限制: 1 Sec  内存限制: 64 MB
    提交: 936  解决: 143
    [提交][状态][讨论版]

    题目描述

    小菜最喜欢吃香蕉啦~所以千万别在小菜面前提香蕉两字,不然他肯定缠着问你要~哈哈~。What?“相交”也读作“香蕉”,好吧,那我们就慷慨点吧,来算算下面的问题有没有小菜喜欢的东西。

    输入

    每组数据为两行,包含8个整数,分别表示四个坐标,(X1,Y1)至(X4,Y4),0<=Xi,Yi<=1000,前两个坐标和后两个坐标分别确定一条直线,计算这两条直线是否相交?

    输出

    两条直线若相交,输出Yes,若不相交,输出No,每个实例输出为一行

    样例输入

    1 1 2 2

    2 1 3 2

    1 1 2 2

    2 1 3 3

    样例输出

    No

    Yes

     

    解题思路:

      如果两条直线重合呢?算是相交

      如果一条直线斜率存在另一条不存在呢?

      如果两条直线斜率都不存在呢?

     

    请看代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 int main()
     4 {
     5     int x1,y1,x2,y2,x3,y3,x4,y4;
     6     while (scanf("%d%d%d%d",&x1,&y1,&x2,&y2)!=EOF)
     7     {
     8         scanf("%d%d%d%d",&x3,&y3,&x4,&y4);
     9 
    10         int d1=(y2-y1)*(x4-x3);//判断两条直线斜率是否相等,和斜率不存在时判断两直线是否平行
    11         int d2=(x2-x1)*(y4-y3);
    12         
    13         int d3=(y3-y1)*(x2-x1);//判断两条直线是否重合
    14         int d4=(x3-x1)*(y2-y1);
    15         if (d1 == d2&&d3 !=d4)
    16             printf("No
    ");
    17         else printf("Yes
    ");
    18     }
    19     return 0;
    20 }
  • 相关阅读:
    struts2之拦截器
    JavaWeb开发之HttpServletResponse
    JavaWeb开发之Servlet
    HTTP协议详解
    字符串
    数组
    第一个只出现一次的字符
    DDoS的类型及原理
    引用变量&和指针*的区别
    赋值运算符的重载
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/3460571.html
Copyright © 2020-2023  润新知