创建一个跳房子游戏,以查看它是否可解决或无法在c中解决

问题描述 投票:0回答:1

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

数字周围有方形,表示您当前所处的位置。您可以通过跳跃您所站号码所指示的空格数来向左或向右移动。因此,如果你站在4,你可以向左跳4个空格或向右跳4个空格。你不能跳过任何一端。

例如,第一个数字(4)只允许你向右跳,因为左边没有可以跳到的数字。

目标:你想要到达该线远端(右侧)的0。您也可以保证只有一个零,这也将是最右侧。

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

c puzzle
1个回答
0
投票

你要写一个递归函数,它返回一个整数1(对于可解决的)或0(对于不可解的),...

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

递归函数定义具有一个或多个基本情况,意味着函数为其简单地生成结果(不重复)的输入,以及一个或多个递归情况,意味着程序重复的输入(调用自身) 。

基本案例是:

  • 跳到给定的正方形线之外→返回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)

© www.soinside.com 2019 - 2024. All rights reserved.