首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XY 5x5板块运动的高效伪码

XY 5x5板块运动的高效伪码
EN

Stack Overflow用户
提问于 2020-07-25 18:16:57
回答 3查看 70关注 0票数 0

我正在为具有5x5孔的XY表创建代码(见图)。它有两个电机,一个用于X位置,一个用于Y位置。我知道每个洞的确切位置,并创建了两个函数:

NextHoleX(布尔前进) NextHoleY()

NextHoleX将根据布尔值向左或向右移动到下一个洞。

NextHoleY会向下移动到下一个洞,它不能向上移动。

你能想到的最有效的伪代码是什么直到你到达终点(右下方)?

详情请参见图片:

EN

回答 3

Stack Overflow用户

发布于 2020-07-25 19:14:02

我认为Paul Hankin的方法非常好:你从那里开始,然后引入for循环来描述重复的操作,例如,而不是:

代码语言:javascript
复制
NextHoleX(true);
NextHoleX(true);
NextHoleX(true);
NextHoleX(true);

你可以这样写:

代码语言:javascript
复制
for (int i=0 to 3){
  NextHoleX(true);
}

然后从那里继续(最终会得到两个嵌套的for循环)。

然而,当你需要处理障碍时,或者在你事先不知道棋盘大小的情况下,情况可能会变得复杂。在这种情况下,您可能需要额外的功能,比如验证在某个方向上移动的可能性。如果是这种情况,您可能需要编辑您的问题。

票数 0
EN

Stack Overflow用户

发布于 2020-07-25 19:30:41

也许是这样的:

代码语言:javascript
复制
int act[24] = { 1,1,1,1,2,0,0,0,0,2,1,1,1,1,2,0,0,0,0,2,1,1,1,1 };

for(int i=0; i<24; i++) {
    if(act[i] == 2)
        NextHoleY();
    else
        NextHoleX(act[i]);
}
票数 0
EN

Stack Overflow用户

发布于 2020-07-25 20:15:01

因为你只能往下走,而不能往上走,所以图中所示的方法是最有效的策略。

假设NextHoleX(1)表示右,NextHoleX(0)表示左。

代码语言:javascript
复制
int matrix[25], j;
size_t len = sizeof(matrix) / sizeof(matrix[0]), i;
_Bool flag = 1;

for (i = 0, j = 0; i < len; i++, j++)
{
    j == 5 ? NextHoleY(), flag = !flag, j = -1 : 0;          
    NextHoleX(flag);
}

代码语言:javascript
复制
#include <stdio.h>

void NextHoleX(_Bool b) {}   // foo for the sake of the experiment.
void NextHoleY(void) {}      // foo for the sake of the experiment.

int main (void)
{
    int matrix[25], j;
    size_t len = sizeof(matrix) / sizeof(matrix[0]), i;
    _Bool flag = 1;

    for (i = 0, j = 0; i < len; i++, j++)
    {
        j == 5 ? NextHoleY(), flag = !flag, j = -1 : 0;          
        NextHoleX(flag);
    }
}

Online Test

注意,这个问题在这里更合适:https://codegolf.stackexchange.com/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63087135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档