龟兔赛跑 PTA

写前感言:

我第一次写这题的时候对这题的出题的考察意义不太理解,我就把它当作一个数学题来做,枚举每一种情况,代码写的又长又凑,不过总归也是写出来了,但是当时没有拿满,应该是数学公式计算错了,但是现在再回头看看,哦~~~原来在考察 条件语句和循环呐,那这 我 太 熟 啦!!!

题目如下:

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

输入格式:

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

输出格式:

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

输入样例:

复制代码
242

输出样例:

复制代码
@_@ 726

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

我的理解:

当你突然看见这题,大概率会感到一阵的不知所措,但是我现在来给你讲讲┗|`O′|┛ 嗷~~:

首先我们读题知道

1.兔子的速度是9,乌龟是3

2.兔子每10分钟会回头一次(这不就是一个利用循环的好机会吗)

3.如果兔子在前面,兔子休息30分钟,否则努力10分钟,那么这不就是一个条件判断语句吗,就是说,判断兔子在不在前面,什么时候进行判断捏,是不会当我们的兔子回头的时候才会去进行比较,所以把那个循环和这个if结合就是这题的破题关键了

4.最后出循环,进行比较,最后输出

来看看代码吧:

我的代码:

cpp 复制代码
#include<stdio.h>
int main()
{
    int t;
    scanf("%d",&t);
    int rab = 0, tur = 0;
    for(int i = 1;i <= t;i++){
        rab += 9;
        tur += 3;
        if(i % 10 == 0){//判断是否到了10分钟,因为每10分钟我们兔子回头一次
            if(rab > tur){//判断兔子在前面还是后面
                if(i + 30 <= t){ //当兔子在乌龟前面的时候,兔子就要睡觉了,我们的乌龟继续向前,那么是不是只用加上兔子睡觉这段时间乌龟的路程就好了,但是捏,兔子每次一定会睡觉30分钟,但是你怎么能确保在这个30分钟之内比赛没有结束呢(就是i依然小于等于t),所以我们继续判断
                    i += 30;//当比赛在30分钟内不会结束时,直接让时间去到30分钟之后,然后乌龟加90(就是30*3)
                    tur += 90;
                } else {//这个讲的就是,如果兔子睡觉睡着睡着比赛结束了,那么是不是乌龟就跑不了90米,那么乌龟跑了多远呢? 不就是时间乘上速度吗
                    tur += 3 * (t - i);
                    i = t;//把时间直接跑完了
                }
            } else {//这个条件就是说如果兔子10分钟回头的时候突然发现:艾玛,🐢咋我前面,是不是兔子也要努力10分钟了,欸?努力10分钟,万一比赛在这个10分钟之内结束了呢,所以我们是不是继续分两类
                if(i + 10 <= t){//这个10分钟内结束不了,时间来到10分钟后,乌龟加30,兔子加90
                    i += 10;
                    tur += 30;
                    rab += 90;
                } else {//这个10分钟之内比赛结束了,那么是不是和上面如出一辙
                    tur += 3 * (t - i);
                    rab += 9 * (t - i);
                    i = t;//把时间直接跑完了
                }
            }
        }
    }
    if(rab > tur){//结束的时候判断输出就好了
        printf("^_^ %d",rab);
    } else if(rab < tur){
        printf("@_@ %d",tur);
    } else {
        printf("-_- %d",rab);
    }
    return 0;
}

到这里就结束啦!!!

欢迎小伙伴们评论区讨论,提问。

我是荒古前,期待你的关注~~~

~~~完结撒花✌y( •̀ ω •́ )y✌~~~

相关推荐
秦苒&1 小时前
【C语言指针二】从入门到通透:核心知识点全梳理(野指针,assert断言,指针的使用和传址调用,数组名的理解和使用指针反访问数组)
c语言·开发语言
AndrewHZ1 小时前
【遥感图像入门】遥感图像专用去噪算法:核心方案与实战(PyTorch代码)
pytorch·算法·计算机视觉·cv·遥感图像·高分辨率·去噪算法
前端小L2 小时前
回溯算法专题(八):精细化切割——还原合法的「IP 地址」
数据结构·算法
Tandy12356_2 小时前
手写TCP/IP协议——IP层输出处理
c语言·网络·c++·tcp/ip·计算机网络
Hcoco_me8 小时前
大模型面试题17:PCA算法详解及入门实操
算法
跨境卫士苏苏8 小时前
亚马逊AI广告革命:告别“猜心”,迎接“共创”时代
大数据·人工智能·算法·亚马逊·防关联
云雾J视界9 小时前
当算法试图解决一切:技术解决方案主义的诱惑与陷阱
算法·google·bert·transformer·attention·算法治理
Xの哲學9 小时前
Linux Miscdevice深度剖析:从原理到实战的完整指南
linux·服务器·算法·架构·边缘计算
夏乌_Wx9 小时前
练题100天——DAY23:存在重复元素Ⅰ Ⅱ+两数之和
数据结构·算法·leetcode
立志成为大牛的小牛9 小时前
数据结构——五十六、排序的基本概念(王道408)
开发语言·数据结构·程序人生·算法