当前位置:编程学习 > C#/ASP.NET >>

新手问题

C#编码

狐狸和黄鼠狼进行跳跃比赛,狐狸每次跳2又4分之3米,黄鼠狼每次跳4又8分之1米,它们每秒钟跳一次,比赛跑道全长1500米,在比赛跑道上从起点开始每隔6又16分之3米挖一个陷阱(起点处没有陷阱,并且陷阱视作一点),它们从陷阱里爬出来都需要10秒,它们同时开始出发,请问当它们当中的一个到达终点时,另一个还差多少米?

求大婶详解。(代码) C# 编码 --------------------编程问答-------------------- 没有大婶回帖啊。。。。 --------------------编程问答-------------------- 你好,我是大婶,请问你有什么要问 --------------------编程问答-------------------- 我自己做的这个,估计不是很好。
namespace IMOTest
{
    public class Fox
    {
        //狐狸即时总路程
        public float FoxDistance = 0f;
        //狐狸的速度
        public float FoxSpeed = 11 / 4f;
        //狐狸已经掉入陷阱的次数
        public int FoxTimes =0 ;

        /// <summary>
        /// 狐狸跳
        /// </summary>
        public void FoxRun()
        {
            FoxDistance += FoxSpeed;
        }

        /// <summary>
        /// 狐狸停
        /// </summary>
        public void FoxStop()
        {
            FoxDistance = FoxDistance;
        }
    }
}


namespace IMOTest
{
    public class Weasel
    {
        //黄鼠狼即时路程
        public float WeaselDistance = 0f;
        //黄鼠狼的速度
        public float WeaselSpeed = 33 / 8f;
        //黄鼠狼已经掉入陷阱的次数
        public int WeaselTimes = 0;

        /// <summary>
        /// 黄鼠狼跳
        /// </summary>
        public void WeaselRun()
        {
            WeaselDistance  += WeaselSpeed;
        }
        /// <summary>
        /// 黄鼠狼停
        /// </summary>
        public void WeaselStop()
        {
            WeaselDistance = WeaselDistance;
        }
    }
}

namespace IMOTest
{
    class Program
    {
        private static void Main()
        {
            //总比赛路程
            const int distance = 1500;
            //掉入陷阱所用时间
            const int reRun = 10;
            //陷阱的间距
            const float trapSite = 99/16f;
            //申明狐狸对象
            var f = new Fox();
            //申明黄鼠狼对象
            var w = new Weasel();
            //记录时间变量
            int time;
            //这个循环模拟了整个比赛过程
            for (time = 0; f.FoxDistance <= distance && w.WeaselDistance <= distance; time++)
            {
                //狐狸开始跳
                if (f.FoxDistance != 0)
                {
                    //如果狐狸跳的距离恰好是陷阱间距的倍数,狐狸掉入陷阱
                    if (f.FoxDistance%trapSite == 0)
                    {
                        //判定时间(如果当前时间=路程/速度+已经掉入陷阱数*10,这时狐狸停)
                        if (time == f.FoxDistance/f.FoxSpeed + f.FoxTimes*reRun)
                        {
                            f.FoxStop();
                        }
                        //如果当前时间一直在(路程/速度+已经掉入陷阱数*10+10)之间,狐狸这是还在陷阱里面,狐狸停
                        else if (time < (f.FoxDistance/f.FoxSpeed + f.FoxTimes*reRun + 10))
                        {
                            f.FoxStop();
                        }
                        //如果当前时间恰好=路程/速度+已经掉入陷阱数*10+10,说明狐狸刚要爬出陷阱,狐狸开始跳,这也完成了一次陷阱
                        else if (time == (f.FoxDistance/f.FoxSpeed + f.FoxTimes*reRun + 10))
                        {
                            f.FoxTimes++;
                            Console.WriteLine("狐狸第{0}次掉进陷阱!", f.FoxTimes);
                            f.FoxRun();
                        }
                        else
                        {
                            f.FoxRun();
                        }
                    }
                    else
                    {
                        f.FoxRun();
                    }
                }
                else
                {
                    f.FoxRun();
                }
                //黄鼠狼开始跳
                if (w.WeaselDistance != 0)
                {
                    //如果黄鼠狼跳的距离恰好是陷阱间距的倍数,狐狸掉入陷阱
                    if (w.WeaselDistance % trapSite == 0)
                    {
                        //判定时间(如果当前时间=路程/速度+已经掉入陷阱数*10,这时黄鼠狼停)
                        if (time == w.WeaselDistance / w.WeaselSpeed + w.WeaselTimes * reRun)
                        {
                            w.WeaselStop();
                        }
                        //如果当前时间一直在(路程/速度+已经掉入陷阱数*10+10)之间,黄鼠狼这是还在陷阱里面,黄鼠狼停
                        else if (time < (w.WeaselDistance / w.WeaselSpeed + w.WeaselTimes * reRun + 10))
                        {
                            w.WeaselStop();
                        }
                        //如果当前时间恰好=路程/速度+已经掉入陷阱数*10+10,说明黄鼠狼刚要爬出陷阱,黄鼠狼开始跳,这也完成了一次陷阱
                        else if (time == (w.WeaselDistance / w.WeaselSpeed + w.WeaselTimes * reRun + 10))
                        {
                            w.WeaselTimes++;
                            Console.WriteLine("黄鼠狼第{0}次掉进陷阱!", w.WeaselTimes);
                            w.WeaselRun();
                        }
                        else
                        {
                            w.WeaselRun();
                        }
                    }
                    else
                    {
                        w.WeaselRun();
                    }
                }
                else
                {
                    w.WeaselRun();
                }
            }
            if (f.FoxDistance > w.WeaselDistance)
            {
                Console.WriteLine("时间{0}",time);
                Console.WriteLine("狐狸最先到达终点!");
                //Console.WriteLine("黄鼠狼距离终点还有{0}米",(distance-w.WeaselDistance).ToString());
                Console.WriteLine("黄鼠狼距离终点还有{0}米", ((time - w.WeaselTimes*10)*w.WeaselSpeed).ToString());
            }
            else
            {
                Console.WriteLine("黄鼠狼最先到达终点!");
                Console.WriteLine("狐狸距离终点还有{0}米", (distance - f.FoxDistance).ToString());
            }
            Console.ReadLine();
        }
    }
} --------------------编程问答--------------------
引用 2 楼 vb763305825 的回复:
你好,我是大婶,请问你有什么要问


我的意思说用编程的新思想,来做这道题。看看有没有清晰的思路,直接明了,就相当于现实生活中很多事情可以用编程的方式来做。

不主要看代码,主要是思想!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,