小编Jea*_*out的帖子

在Pascal中回溯:找到最大加权分支

我一直在学习Pascal(使用Free Pascal编译器)一个星期,并且遇到了一个看似简单的练习.给定如下所示的结构,找到最大加权分支:

    1
   4 9
  7 0 2
 4 8 6 3
Run Code Online (Sandbox Code Playgroud)

分支是从顶部开始的任何数字序列(在这种情况下:1),对于每个数字,分支可以向左或向右扩展.例如,分支1-4-0可以扩展为1-4-0-8或1-4-0-6.所有分支必须从顶部开始,在底部结束.

在这个例子中,最大分支是1-4-7-8,这给了我们20.为了解决这个问题,我尝试使用回溯.三角形结构存储在"三角形"类型的数组中:

type triangle = array[1..MAX_NUM_OF_ROWS, 1..MAX_NUM_OF_ROWS] of integer;
Run Code Online (Sandbox Code Playgroud)

这是我的实现:

function findAux(data: triangle; dim: integer; i: integer; j:integer) : integer;
begin
if i = dim then
    findAux := data[i][j]
else
    if findAux(data, dim, i + 1, j + 1) > findAux(data, dim, i + 1, j) then
        findAux := data[i+1][j+1] + findAux(data, dim, i + 1, j + 1);
    else
        findAux := data[i+1][j] + findAux(data, dim, i + …
Run Code Online (Sandbox Code Playgroud)

recursion pascal freepascal backtracking

5
推荐指数
1
解决办法
377
查看次数

在SML中反转字符串的想法

我是SML的新手,并且有一些C/C++的背景知识.我一直在尝试编写一个名为reverseString的函数,它接收一个字符串来反转.非常直截了当.使用辅助函数,我能够编写一个函数来反转任何给定的字符串,并在结果中添加一个额外的字符.例如:

- reverseString("hello");
val it = "ollehh" : string
Run Code Online (Sandbox Code Playgroud)

任何有关如何克服这一障碍的帮助都将非常有帮助.请记住,我正在尝试在没有任何附加功能的情况下实现该功能(即,在我的实现中没有使用的功能):

fun reverseAux(s:string, i:int) : string = 
    if i = 0 then str(String.sub(s, 0)) 
    else str(String.sub(s, i-1)) ^ reverseAux(s, i-1);

fun reverseString(s:string) : string = 
    reverseAux(s, size(s));
Run Code Online (Sandbox Code Playgroud)

sml smlnj

1
推荐指数
1
解决办法
1214
查看次数

标签 统计

backtracking ×1

freepascal ×1

pascal ×1

recursion ×1

sml ×1

smlnj ×1