我正在为具有5x5孔的XY表创建代码(见图)。它有两个电机,一个用于X位置,一个用于Y位置。我知道每个洞的确切位置,并创建了两个函数:
NextHoleX(布尔前进) NextHoleY()
NextHoleX将根据布尔值向左或向右移动到下一个洞。
NextHoleY会向下移动到下一个洞,它不能向上移动。
你能想到的最有效的伪代码是什么直到你到达终点(右下方)?
详情请参见图片:

发布于 2020-07-25 19:14:02
我认为Paul Hankin的方法非常好:你从那里开始,然后引入for循环来描述重复的操作,例如,而不是:
NextHoleX(true);
NextHoleX(true);
NextHoleX(true);
NextHoleX(true);你可以这样写:
for (int i=0 to 3){
NextHoleX(true);
}然后从那里继续(最终会得到两个嵌套的for循环)。
然而,当你需要处理障碍时,或者在你事先不知道棋盘大小的情况下,情况可能会变得复杂。在这种情况下,您可能需要额外的功能,比如验证在某个方向上移动的可能性。如果是这种情况,您可能需要编辑您的问题。
发布于 2020-07-25 19:30:41
也许是这样的:
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]);
}发布于 2020-07-25 20:15:01
因为你只能往下走,而不能往上走,所以图中所示的方法是最有效的策略。
假设NextHoleX(1)表示右,NextHoleX(0)表示左。
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);
}#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);
}
}注意,这个问题在这里更合适:https://codegolf.stackexchange.com/
https://stackoverflow.com/questions/63087135
复制相似问题