7-39 龟兔赛跑 (20 分)

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

输入格式:

输入在一行中给出比赛时间T(分钟)。

输出格式:

在一行中输出比赛的结果:乌龟赢输出@_@,兔子赢输出^_^,平局则输出-_-;后跟1空格,再输出胜利者跑完的距离。

输入样例:

242

输出样例:

@_@ 726

 需要注意的是即使是平局,也需要跑的输出距离

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);
        int t = 0, T, rabbit = 0, tutle = 0;
        T = input.nextInt();
        while (t < T) {// 对事件进行检测,根据龟兔的距离,判断时间是+10还是+30
            if (rabbit <= tutle) {
                if (T - t < 10) {// 时间已经不够一次正常的循环
                    rabbit += 9 * (T - t);
                    tutle += 3 * (T - t);
                    t = T;
                }
                else {
                    rabbit += 9 * 10;
                    tutle += 3 * 10;
                    t += 10;
                }
            }
            else {
                if (T - t < 30) {
                    tutle += 3 * (T - t);
                    t = T;
                }
                else {
                    tutle += 3 * 30;
                    t += 30;
                }
            }
        }
        if (rabbit == tutle)
            System.out.println("-_- " + rabbit);
        else if (rabbit > tutle)
            System.out.println("^_^ " + rabbit);
        else
            System.out.println("@_@ " + tutle);
        input.close();
    }
}

以前写的C语言,记得码了3个小时,各种踩坑。。。。。(废物实锤)

#include <stdio.h>
const int velocity1 = 3;
const int velocity2 = 9;

int main()//726
{
	int i, T, t = 0, dist1 = 0, dist2 = 0;
	
	scanf("%d", &T);
	while (getchar() != '\n')
		continue;
	while (t <= T)
	{
		i = t;
		
		if (dist1 >= dist2)
		{
			
			if (T - t < 10)
			{
				dist1 += (T - t) * velocity1;
				dist2 += (T - t) * velocity2;
				break;
			}
			else 
			{
				t += 10;
				dist1 += (t - i) * velocity1;
				dist2 += (t - i) * velocity2;
			}
		}	
		else 
		{
			if (T - t < 30)
				{
					dist1 += (T - t) * velocity1;
					break;
				}
			else
			{
				t += 30;
				dist1 += (t - i) * velocity1;
			}
		}
	}
	if (dist1 > dist2)
		printf("@_@ %d", dist1);
	else if(dist1 < dist2)
		printf("^_^ %d", dist2);
	else 
		printf("-_- %d", dist2);
 	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值