我今天遇到了一个有趣的问题,我有点被一个解决方案绊倒了。问题是:
机器人可以在网格上移动。机器人从原点即(0,0)开始,可以上下左右移动,即(x,y+1),(x,y-1),(x-1,y)和(x+1,y),但移动机器人时会遇到障碍物。要检查网格上的点是否安全,请取数字x和数字y的绝对和,然后检查其是否小于或等于23。i、 e如果该点为(39,39)=>;3+9+3+9为24且该点不安全,或者如果(-51,7)=>;5+1+7等于13,那么就安全了。问题是找出机器人能进入的区域有多大
思维过程:
阅读此问题后的主要收获是找到数字小于或等于23的笛卡尔坐标,并基于坐标返回区域。现在有很多笛卡尔坐标,它们可以限定并形成矩形或正方形,但是它们都有相同的面积。现在我选择从原点生成一个正方形,这样x==y和x和y的数字之和(即x)<;这看起来像
i = 0
while True:
units, tens = i%10, (i/10)%10
x = units+tens
y = units+tens
if x + y > 23:
break;
i+=1
但我想我可能错了,因为我返回39,x,y坐标返回(12,12)。然后我必须计算(x,y),(-x,y),(-x,-y)和(x,-y)之间的面积。我认为我的方法是错误的,希望任何人都能想到如何在网格上找到最大的访问区域
结果
这个怎么样?但是我认为这个代码是不正确的。因为结果太大了
编辑:如@David Choweller所指出的,考虑负坐标。还通过删除一些不必要的索引使解决方案更干净。 编辑:修复了总面积计算中的错误,谢谢@polapts
这是结果(黄色显示的可访问区域):![enter image description here](https://i.stack.imgur.com/8QgcO.png)
在我看来,对于一个无限大的电路板,似乎不需要计算:)
相关问题 更多 >
编程相关推荐