热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编程挑战:最好的猫的竞争即将来临

如何解决《编程挑战:最好的猫的竞争即将来临》经验,为你挑选了1个好方法。

最近我参加了编码挑战,我的得分只有50%.很少有测试用例执行我的代码失败,我无法找到代码失败的原因.所以我在下面添加了问题和我的代码.我很感谢您帮助找到测试失败原因.

需求

最好的猫的竞争即将来临.比赛由几场决斗组成.在每次决斗中,两只猫都站在一条彼此面对的无限线上.年长的猫开始 - 它必须以1或2个猫单位向对手移动.他们俩都不能回去,跳过他的对手或分享同一个位置.猫主人尽可能地训练他们的猫,因此他们的宠物可以最佳地进行游戏.无法移动的猫会失去.

输入

输入的第一行包含测试次数t(t≤1000).每个测试由4个整数组成:第一只猫的年龄和位置,然后是第二只猫的年龄和位置.没有两只猫有相同的年龄.此任务中的任何计算都不会超过该数字2**31 - 1.

产量

对于每个测试打印1,如果第一只猫获胜,否则为0.

输入:

1
10 1 9 5

输出:

0

说明: Cat 1可以移动到任何一个字段23.在接下来的动作中,2无论对手的决定能否阻挡他并赢得胜利.

我的守则

using System;
using System.Linq;

namespace Solution
{
    class Solution
    {
        static void Main(string[] args)
        {
            var input1 = Console.ReadLine().Trim();
            var numOfTest = Convert.ToInt32(input1);

            for (int i = 0; i  Convert.ToInt32(x)).ToArray();
                int result = -1;

                if (catDetails[0] == catDetails[2])
                {
                    Console.WriteLine(-1);
                    break;
                }

                if(catDetails[0] > catDetails[2])
                    result = CalculateWinningResult(catDetails[0], catDetails[1], catDetails[2], catDetails[3], 1);
                else
                    result = CalculateWinningResult(catDetails[0], catDetails[1], catDetails[2], catDetails[3], 2);

                Console.WriteLine(result);
            }
        }

        private static int CalculateWinningResult(int cat1Age, int cat1Position, int cat2Age, int cat2Position, int moveCat)
        {

            switch (moveCat)
            {
                case 1:

                    cat1Position = CalculateCatPosition(cat1Position, cat2Position);
                    if (cat1Position == 0)
                        return 0;
                    else
                        return CalculateWinningResult(cat1Age, cat1Position, cat2Age, cat2Position, 2);
                case 2:
                    cat2Position = CalculateCatPosition(cat2Position, cat1Position);
                    if (cat2Position == 0)
                        return 1;
                    else
                        return CalculateWinningResult(cat1Age, cat1Position, cat2Age, cat2Position, 1);
            }
            return 0;
        }

        private static int CalculateCatPosition(int currentCatPosition, int opponentCatPosition)
        {
            int tempPosition;
            if (currentCatPosition > opponentCatPosition)
            {
                tempPosition = (currentCatPosition - 1);

                if (tempPosition <= opponentCatPosition)
                    return 0;
                else
                {
                    tempPosition = (currentCatPosition - 2);
                    if (tempPosition >= opponentCatPosition)
                        return 0;
                    else
                        currentCatPosition = tempPosition;
                }
            }
            else
            {
                tempPosition = (currentCatPosition + 1);

                if (tempPosition <= opponentCatPosition)
                    return 0;
                else
                {
                    tempPosition = (currentCatPosition + 2);
                    if (tempPosition >= opponentCatPosition)
                        return 0;
                    else
                        currentCatPosition = tempPosition;
                }
            }

            return currentCatPosition;
        }
    }
}

结果测试用例结果



1> Dmitry Byche..:

让我们分析一下游戏.当一只猫移动失去游戏?首先,每只猫的位置与猫之间的距离无关紧要:如果在10 1 9 5测试中,移动中10 101 9 105的猫比移动中的猫损失一样.

现在,让我们画一个简单的表格:

   distance | cat on move
   ----------------------
          0 | Loses (evident: he is blocked)
          1 | Wins
          2 | Wins
          3 | Loses
          4 | Wins
          5 | Wins
          6 | Loses 
          7 | Wins
          8 | Wins
          9 | Loses 
         10 | Wins
         11 | Wins
         12 | Loses 
....

你能看到这种模式吗?如果猫之间的距离可以被 3移动失去的猫整除 ; 否则他(猫是"他"或"她",从不"它"!)获胜,他的策略是保持他和他的对手之间的距离可被整除3.你可以通过归纳证明它.

对于实例:10 1 9 5例如,距离是5 - 1 - 1 == 33 % 3 == 0(距离可被整除3),因此移动的猫(10岁月)会失去.

伪代码:(不要破坏乐趣;请自己实现C#代码).如果给age1 x1 age2 x2猫的年龄和初始位置4个数字,我们可以找到胜者如下:

 if ((Abs(x2 - x1) - 1) % 3 == 0) then // if distance divisible by 3?
   // Yes: Cat's on move loses
   if (age1 > age2) then 
     return 1
   else      
     return 0
 else  
   // No: Cat's on move wins
   if (age1 > age2) then 
     return 0
   else      
     return 1


这类似于那种从一堆中移除1到3根棍子的游戏策略.尽管我的雌猫不会赞同你对默认猫性别的选择的立场.
推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了在Java中gt、gtgt、gtgtgt和lt之间的区别。通过解释符号的含义和使用例子,帮助读者理解这些符号在二进制表示和移位操作中的作用。同时,文章还提到了负数的补码表示和移位操作的限制。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
author-avatar
mobiledu2502879833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有