Pascal
  • 板块学术版
  • 楼主IceYukino
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/8/20 10:37
  • 上次更新2023/11/4 09:56:54
查看原帖
Pascal
214538
IceYukino楼主2021/8/20 10:37

在学习题目的时候看到一个这样的Pascal代码:

s (2 .. * - 1)

S是一个字符串,请问这个用C++的话该怎么写呢?

全程序:

% CCC 2005 Junior problem 5
% Bananas
%
% this is an exercise in recursion.
% it involved a pair of mutually recursive methods.
%
% This is quite beyond all but the best "junior" programmers
% and would stump many "senior" high school programmers. :-)

forward function monkeyWord (s : string) : boolean

% an a-word is either:
% the letter A  OR
% the letter B + monkey language word + S
function aWord (s : string) : boolean
    if s = "A" then
        result true
    elsif length (s) >= 3 and s (1) = "B" and
            monkeyWord (s (2 .. * - 1)) and s (*) = "S" then
        result true
    else
        result false
    end if
end aWord

% an monkey language word is either:
% an a-word   or
% an a-word + N + monkey language word
body monkeyWord 
    if aWord (s) then
        result true
    else
        % try all combos for the more complex version
        var found : boolean := false
        for i : 2 .. length (s) - 1        
            found := found or
                (aWord (s (1 .. i - 1)) and
                s (i) = "N" and
                monkeyWord (s (i + 1 .. *)))
        end for
        result found
    end if
end monkeyWord


var s : string
loop
    get s
    exit when s = "X"
    if monkeyWord (s) then
        put "YES"
    else
        put "NO"
    end if
end loop

2021/8/20 10:37
加载中...