金鱼饭饭


私信TA

用户名:yyy666

访问量:230

签 名:

排  名 6196
经  验 207
参赛次数 0
文章发表 2
年  龄 0
在职情况 在职
学  校 不知道学院
专  业

  自我简介:

解题思路:
    每一秒判断乌龟和兔子的距离

    如果大于等于t,兔子就休息,同时记录兔子的状态


注意事项:

    兔子睡觉的时间,乌龟已经到终点

    兔子睡醒发现比乌龟领先的距离大于等于t,继续睡觉

参考代码:

import java.util.Scanner;
/**
 * 龟兔赛跑预测
 * http://www.dotcpp.com/oj/problem1476.html
 * @author yangyang
 * 2019-1-4下午04:38:05
 */
public class GuiTu {
 /**
  * 
  题目描述:
   话说这个世界上有各种各样的兔子和乌龟,
   但是  研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。
   于是世界上各个角落都不断在发生着乌龟和兔子的比赛,
   小华对此很感兴趣,于是决定研究不同兔  子和乌龟的赛跑。
   他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,
   于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以  上,
   它们就会停下来休息s秒。
   对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。 
   然而有些比赛相当漫长,全程观看会耗费大量时间,
   而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据
    兔子的速度v1(表示每秒兔子能跑v1  米),
    乌龟的速度v2,以及兔子对应的t,s值,
    以及赛道的长度l——就能预测出比赛的结果。
   但是小华很懒,不想通过手工计算推测出比赛的结果,
   于是他找  到了你——清华大学计算机系的高才生——请求帮助,
   请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。
  输入
   输入只有一行,
   包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2< =100;t< =300;s< =10;l< =10000且为v1,v2的公倍数) 
  输出
   输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。 
   第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。 
  样例输入
   10  5  5  2  20 
  样例输出
   D
   4
  * @param args
  */
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int v1 = sc.nextInt(); //兔子的速度
  int v2 = sc.nextInt(); //乌龟的速度
  int t = sc.nextInt();  // 兔子领先的距离
  int s = sc.nextInt();  //兔子休息的时间
  int l = sc.nextInt();  //跑到总长度
  int tu = 0;
  int gui = 0;
  int sleep = 0;
  boolean flag = false;
  for(int i = 1; ;i++){
   // 判断乌龟和兔子之间的距离
   if(!flag && tu-gui>=t){
    sleep = s;// 兔子休息
    flag = true;
   }
   if(sleep>0){
    sleep--;
   }else{
    flag = false;
    tu += v1;
   }
   
   gui += v2;
//   System.out.println(i+"--"+tu+"--"+gui);
   // 判断是否有人已到终点
   if(tu>=l || gui>=l){
    if(tu>=l&&gui>=l){
     System.out.println("D");
    }else if(tu<l){
     System.out.println("T");
    }else{
     System.out.println("R");
    }
    System.out.println(i);
    break;
   }
  }
 }
}

  评论区