创建一个跳房子游戏,看它在C语言中是否可解决

时间:2019-03-03 00:33:31

标签: c puzzle

假设您得到以下数字:
4 4 1 5 2 6 3 4 2 0

该数字带有一个正方形,指示您当前的位置。您可以通过跳动站立的数字所指示的空格数来向左或向右移动。因此,如果您站在4杆上,则可以向左跳4个空格,也可以向右跳4个空格。您不能跳过该行的任何一端。

例如,第一个数字(4)仅允许您向右跳,因为左边没有数字可以跳至。

目标:您想在直线的远端(右侧)达到0。您还可以保证只有一个零,再次位于最右边。

您将要编写一个递归函数,该函数将返回整数1(对于可求解)或0(对于不可求解),指示您是否能够获得最右边的0。

1 个答案:

答案 0 :(得分:0)

  

您将要编写一个递归函数,该函数将返回整数1(对于可求解)或0(对于不可求解),…

Recursion (computer science) - Wikipedia是一个好的开始:

  

递归函数定义具有一个或多个基本案例,表示该函数对其琐碎地产生结果的输入(无重复),以及一个或多个递归案例 i>,表示程序重复发生的输入(调用自身)。

基本情况是:

  • 在给定的正方形线之外跳转→返回0
  • 到达数字为0的正方形→返回1

递归的情况是:

  • 返回(可用于向右跳转或可用于向左跳转)

简短的C代码:

int hops[] = { 4, 4, 1, 5, 2, 6, 3, 4, 2, 0 };
#define DIM(a)  sizeof a / sizeof *a

int solvable(int square)
{
    if (square < 0 || DIM(hops) <= square) return 0;    // past an end
    if (hops[square] == 0) return 1;                    // got to the 0
    return solvable(square+hops[square]) || solvable(square-hops[square]);
}

最初的呼叫是从索引为0的正方形开始的:solvable(0)