龟兔赛跑

用C语言解“龟兔赛跑”题

老子叫甜甜 提交于 2020-03-04 18:50:03
7-22 龟兔赛跑 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? 输入格式: 输入在一行中给出比赛时间T(分钟)。 输出格式: 在一行中输出比赛的结果:乌龟赢输出@ @,兔子赢输出 _ ,平局则输出- -;后跟1空格,再输出胜利者跑完的距离。 输入样例: 242 输出样例: @_@ 726 思路 因为兔子是先跑十分钟在看乌龟的情况再决定是否休息,所以需要于乌龟比较。通过分析可知,前十分钟:兔子跑90m,乌龟跑30m,然后兔子休息三十分钟;前四十分钟,兔子90m(休息三十分钟),乌龟跑120m;前五十分钟,兔子跑180m,乌龟跑150m,然后兔子休息三十分钟;前八十分钟,兔子跑180m(休息六十分钟),乌龟跑240m;前九十分钟,兔子跑270m,乌龟跑270m;…可看出九十分钟一个周期,兔子只会在0-10,40-50,80-90这三个时间段跑,而乌龟却一直在跑,则可由此判断谁是胜利者 代码 # include <stdio.h> int main ( ) { int T ;

java线程—经典龟兔赛跑问题

邮差的信 提交于 2020-02-20 04:20:58
package jd1908_corejava.ch15.work; //线程经典问题--龟兔赛跑问题 public class Race { public static void main(String[] args) { RabbitAndTurtle rabbit = new RabbitAndTurtle(); rabbit.setName("兔子"); RabbitAndTurtle turtle = new RabbitAndTurtle(); turtle.setName("乌龟"); rabbit.start(); turtle.start(); } } class RabbitAndTurtle extends Thread { private int num; // boolean类型默认初始值为false private static boolean flag; //run执行完毕后线程就会死亡,关闭 //yield(),释放资源,回到run的顶部 @Override public void run() { while (num < 100) { if (flag) { // 线程终止 break; } if (Math.random() < 0.3 && Thread.currentThread().getName().equals("兔子")) { num

c语言模拟(龟兔赛跑)

一笑奈何 提交于 2020-02-06 06:03:49
开始赛跑后的每一秒都要判断兔子是否到达休息的标准如果兔子可以休息则判断休息途中乌龟跑多少距离以及兔子休息够后是否仍然休息以及兔子和乌龟每一秒的运动距离另外每秒都要判断兔子或者乌龟是否到达终点 # include <stdio.h> void fun ( int * s1 , int * s2 , int s , int t , int v1 , int v2 , int * T , int l ) //计算兔子和乌龟跑的距离以及兔子休息时间乌龟运动距离 { int S ; S = * s1 - * s2 ; if ( S >= t ) { int i = 0 ; while ( i < s && * s2 < l && * s1 < l ) { * s2 + = v2 ; * T + = 1 ; i ++ ; } } else { * s2 + = v2 ; * s1 + = v1 ; * T + = 1 ; } int main ( ) { int v1 , v2 , s , t , l ; int s1 = 0 , s2 = 0 , T = 0 ; scanf_s ( "%d%d%d%d%d" , & v1 , & v2 , & t , & s , & l ) ; while ( s1 != l && s2 != l ) //在没有任一到达终点前一直计算 { fun ( &

PTA 龟兔赛跑 (20分)

青春壹個敷衍的年華 提交于 2020-02-04 19:12:18
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? 输入格式: 输入在一行中给出比赛时间T(分钟)。 输出格式: 在一行中输出比赛的结果:乌龟赢输出@ @,兔子赢输出 _ ,平局则输出- -;后跟1空格,再输出胜利者跑完的距离。 输入样例: 242 输出样例: @_@ 726 # include <iostream> using namespace std ; int main ( ) { int T , rabbit = 0 , turtle = 0 , flag = 0 ; cin >> T ; for ( int i = 0 ; i < T / 10 ; ++ i ) { turtle + = 30 ; if ( flag == 0 ) { rabbit + = 90 ; if ( rabbit > turtle ) flag = 3 ; } else flag -- ; } turtle + = 3 * ( T % 10 ) ; if ( flag == 0 )

多线程06:龟兔赛跑

元气小坏坏 提交于 2020-02-04 19:11:44
案例:龟兔赛跑-Race 1、首先来个赛道的距离,然后要离终点越来越近 2、判断比赛是否结束,结束就来看下谁胜利了 3、胜利后,打印出胜利者 4、龟兔赛跑开始,相当于两条线程开始跑了,看谁先到最后一步 5、然后,因为故事中是乌龟赢的,兔子要睡觉,所以我们来模拟兔子睡觉 6、最后,乌龟赢得了比赛 实现了Runnable接口,共享一条跑道。丢入Thread代理对象,调用start()方法开启两个线程代表兔子和乌龟,让兔子每10步并且隔10ms睡一觉,让乌龟赢。 1 package com.thread.demo01; 2 3 //模拟龟兔赛跑 4 public class Race implements Runnable { 5 6 //胜利者 7 private static String winner; 8 9 @Override 10 public void run() { 11 for (int i = 0; i <= 100; i++) { 12 13 //模拟兔子休息,每10步休息10毫秒 14 if (Thread.currentThread().getName().equals("兔子") && i % 10 == 0) { 15 try { 16 Thread.sleep(10); 17 } catch (InterruptedException e) { 18 e

基础练习 龟兔赛跑预测

好久不见. 提交于 2020-02-01 17:04:09
问题描述   话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先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”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。  

龟兔赛跑预测---蓝桥

旧巷老猫 提交于 2020-01-28 15:36:31
描述   话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先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”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。 第二行输出一个正整数,表示获胜者

7-22 龟兔赛跑 (20分)

巧了我就是萌 提交于 2020-01-21 03:31:56
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? 输入格式: 输入在一行中给出比赛时间T(分钟)。 输出格式: 在一行中输出比赛的结果:乌龟赢输出 @_@ ,兔子赢输出 ^_^ ,平局则输出 -_- ;后跟1空格,再输出胜利者跑完的距离。 输入样例: 242 输出样例: @_@ 726 #include <stdio.h> #define V_T 3 #define V_R 9 #define S 0 #define R 1 int main(void) { int s_t = 0; int s_r = 0; int status = R; int T = 0; scanf("%d", &T); // 计时器 int timer = 10; int minutes = 0; while(minutes < T) { if(status == R) { if(timer == 0) { if(s_r > s_t) { //休息 status = S; timer = 30; }

7-22 龟兔赛跑 (20分)

不羁岁月 提交于 2020-01-04 15:49:04
7-22 龟兔赛跑 (20分) 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? 输入格式: 输入在一行中给出比赛时间T(分钟)。 输出格式: 在一行中输出比赛的结果:乌龟赢输出@ @,兔子赢输出 _ ,平局则输出- -;后跟1空格,再输出胜利者跑完的距离。 输入样例: 242 输出样例: @_@ 726 参考代码 #include < stdio . h > int main ( ) { int w , t , time ; scanf ( "%d" , & time ) ; int ti = 0 , tmp = 0 , cnt = 0 ; while ( ti <= time ) { if ( tmp == 10 && w < t ) { tmp = 0 ; if ( ti + 30 <= time ) { cnt += 30 ; ti += 30 ; } else { cnt += ( time - ti ) ; ti += ( time - ti ) ; } } if

龟兔赛跑问题

六眼飞鱼酱① 提交于 2020-01-03 08:51:30
题目 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? 输入格式: 输入在一行中给出比赛时间T(分钟)。 输出格式: 在一行中输出比赛的结果:乌龟赢输出 @_@ ,兔子赢输出 ^_^ ,平局则输出 -_- ;后跟1空格,再输出胜利者跑完的距离。 输入样例: 242 输出样例: @_@ 726思路:反复思考了很长时间,虽然一开始的思路很清晰,但是一开始感到无从下手,在不断的完善中,终于完全写正确了。写完后看了网上其他人的算法,感叹每个人的思考方式都各具特色,可能我的是比较笨拙的方法吧,仅供大家参考。 分析发现,其实时间t只在最初的十分钟内,逐次递增,以后都是十分钟或者30分钟的增加,且10分钟之后t总是整数。这就带来判断的一个问题,当输入的T为非整数时,怎样进行判断。T为非整数,可分为两种情况:第一,它以休息结束。第二,它以龟兔跑步中结束。这需要加入判别变量进行判断。而且需要注意的是,时间小于10分钟与不小于10分钟面临的情况十不同的。(一开始省略的这个判断,很苦恼为什么一直不对