5-22 龟兔赛跑 (20分)

5-22 龟兔赛跑   (20分)

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

输入格式:

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

输出格式:

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

输入样例:

242

输出样例:

@_@ 726

//自己的办法,繁琐;老师的方法,较为简单易懂。

//争取大学四年后,能比老师在编程方面更强。

//自己:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int time;
    int distance1=0,distance2=0;
    scanf("%d",&time);
    if(time<10){
        distance1=9*time;
        distance2=3*time;
    }
    else{

     distance1=90;
     distance2=30;
     time=time-10;
     while(time){
        if(time/10){
            if(distance1>distance2){
                if(time/30){ 
                    distance2=distance2+30*3;
                    time=time-30;
                    if(time/10){
                        distance1=distance1+9*10;
                        distance2=distance2+3*10;
                        time=time-10;
                    }
                    else{
                        distance1=distance1+9*time;
                        distance2=distance2+3*time;
                        time=0;
                    }
                }
                else{
                    distance2=distance2+time*3;
                    time=0;
                }
            }
            else{
                distance1=distance1+9*10;
                distance2=distance2+3*10;
                time=time-10;
            }
        }
        else{
            if(distance1>distance2){
                distance2=distance2+time*3;
                time=0;
            }
            else{
                distance1=distance1+time*9;
                distance2=distance2+time*3;
                time=0;
            }

        }

    }
    }
    if(distance1>distance2){
        printf("^_^ %d\n",distance1);
    }
    else if(distance2>distance1){
        printf("@_@ %d\n",distance2);
    }
    else
        printf("-_- %d\n",distance1);
    return 0;
}
//老师:(每次老师遇到题目,均会先分析,从数据存储到算法思想,到当前问题规律,此题的一个规律要是能分析到,题目就容易了)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int rabbit=0,tor=0;
    int run=1;//用一个变量代表兔子在不在跑
    int T,t=10;
    scanf("%d",&T);
     while(t<=T){
        tor=3*t;
        rabbit=rabbit+run*90;
        if(rabbit>tor){//由规律可推得,在时间为40的周期内, 兔子和乌龟的相对状态,只有兔子比乌龟快,和两者相同。
            run=0;
            t+=20;

        }
        else
            run=1;
        t=t+10;

    }
    tor=3*T;

    if(run)
        rabbit=rabbit+(10-(t-T))*9;
    if(rabbit>tor)
        printf("^_^ %d\n",rabbit);

    else if(tor>rabbit)
        printf("@_@ %d\n",tor);

    else
        printf("-_- %d\n",rabbit);

    return 0;
}

/*#include <stdio.h>
int main(){
    int t, tdis, rdis, run, i;
    scanf("%d",&t);
    run = 1;
    rdis = tdis = 0;
    for(i=10; i<=t;  i+=10){
        tdis = i * 3;
        rdis = rdis + run * 90;
        if(rdis>tdis){
            run = 0;
            i += 20;
        }else{
            run = 1;
        }
    }
    tdis = t*3;
    rdis = rdis + run*(t-i+10)*9;
    if(tdis>rdis) printf("@_@ %d\n",tdis);
    else if(tdis<rdis) printf("^_^ %d\n",rdis);
    else printf("-_- %d\n",tdis);
    return 0;
}
*/



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值