5

我正在寻找你可能在面试中被问及或被要求代表你的工作或教育的一部分的伪代码问题的例子。我不是特别寻找任何领域的示例,因此它可能与设计模式、算法、数据结构、缓存策略、与软件工程和开发有关的任何事情相关,无论是简单的还是复杂的。

例如,我发现的一些常见的主要与排序和搜索技术有关:

冒泡排序

procedure bubbleSort( A : list of sortable items ) defined as:
  do
    swapped := false
    for each i in 0 to length(A) - 2 inclusive do:
      if A[i] > A[i+1] then
        swap( A[i], A[i+1] )
        swapped := true
      end if
    end for
  while swapped
end procedure

插入排序

insertionSort(array A)
begin
    for i := 1 to length[A]-1 do
    begin
        value := A[i];
        j := i - 1;
        done := false;
        repeat
            if A[j] > value then
            begin
                A[j + 1] := A[j];
                j := j - 1;
                if j < 0 then
                    done := true;
            end
            else
                done := true;
        until done;
        A[j + 1] := value;
    end;
end;

二分查找

   BinarySearch(A[0..N-1], value, low, high) {
       if (high < low)
           return -1 // not found
       mid = low + ((high - low) / 2)
       if (A[mid] > value)
           return BinarySearch(A, value, low, mid-1)
       else if (A[mid] < value)
           return BinarySearch(A, value, mid+1, high)
       else
           return mid // found
   }

如果许多人分享他们的想法和经验,我们也许能够建立一个像样的伪代码算法和问题列表。

作为练习,我希望自己提出伪代码表示。因此,即使您找不到伪代码示例,但您认为以这种方式表示它是一个理想的概念,这也会有所帮助。

我也有一些与该主题相关的问题:

  • 你之前在面试中被要求写过哪些伪代码?
  • 这些问题是否往往与一两个函数长的简短、简单的算法有关?
  • 编写伪代码时是否应避免使用特定于语言的结构?由于表示与语言无关,因此不使用每种语言中不存在的 Dispose 和 foreach 等术语是否更安全?

谢谢


编辑:

我发现了一些更多的例子,当我发现更多时,我会继续编辑:


编写一个函数,使用单个字符串来反转句子中单词的顺序,而不是反转单词:

输入:“这只猫坐在垫子上,和另一只猫在一起!”

输出:“猫!另一只带垫子的猫,坐在猫上”


编写一个接受单个字符串的函数,该字符串将返回该字符串中出现次数最多的单词,忽略大小写和标点符号。如果多个单词的出现次数相同,则返回第一个出现的单词:

输入:“这只猫坐在垫子上,和另一只猫在一起!”

输出:


编写一个函数来查找某个字符串中出现次数最多的字符,忽略大小写。如果有多个字符具有相同的最高出现次数,则返回字符串中第一个出现的字符。

输入:“字符”

输出:c


编写一个反转字符串的函数

输入:“反向”

输出:“esrever”

4

5 回答 5

3

我还没有被问到,但是有一个经典的 FizzBu​​zz 问题。

编写一个打印从 1 到 100 的数字的程序。但是对于三的倍数打印“Fizz”而不是数字,对于五的倍数打印“Buzz”。对于同时是三和五的倍数的数字,请打印“FizzBu​​zz”。

http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

这是一个简单的筛选问题,即使是非常新的程序员也不会有任何重大困难。

于 2010-08-15T10:58:23.903 回答
2

在几年前的一次实习面试中,我被要求为此编写一个伪代码解决方案:

编写一个算法,给定一个目录路径,可以计算该目录和所有子目录下的文件总数。

能够解决这个问题表明了对树遍历的理解。

于 2010-08-20T12:22:40.390 回答
1

我自己从来没有被要求在面试中编写伪代码(仍然是学生),但是我的一个向谷歌申请暑期工作的朋友被要求编写一个可以处理正则表达式子集的正则表达式解析器( iirc,仅字母数字输入并使用 *、+ 和 {x,y} 表示法)。我正在考虑明年自己向他们申请一份暑期工作,并且对尝试在现场写出类似的东西的想法感到害怕 XD。

我相信他使用两个相互递归的函数解决了这个问题。不知道怎么做。

哦,顺便说一句,他不只是被要求为此编写伪代码。他被要求在现场编写可以编译的实际 C++ 代码。(在 Google Docs 文档中也是如此)。

于 2010-08-15T10:57:46.433 回答
0

我花了很长时间才弄清楚,但这是我的 Excel VBA 解决句子反转问题的方法。

Public Sub SentenceReverse()

Dim InSentence As String 'Input sentence string
Dim OutSentence As String 'Output sentence string
Dim p As Integer 'Word Start
Dim q As Integer 'Word length

p = 1

InSentence = ActiveSheet.Range("A1").Value 'Assign the sentence to a string

For i = 2 To Len(InSentence) + 1 'Loop through all the characters of the input sentence
    If (Mid(InSentence, i, 1) = " " Or i = Len(InSentence) + 1) Then 'This character is a space or this is the the end of the sentence
        q = i - p 'Set the word length to the number of this position minus the position of the start of this word
        OutSentence = Mid(InSentence, p, q) & " " & OutSentence 'Add this word to the start of the output string
        p = i + 1 'Set the start of the next word as the position of this space + 1
    End If
Next i

MsgBox (OutSentence)

End Sub
于 2015-07-12T18:22:51.613 回答
0

我不知道这是否是最优雅的方法,但这是找到最常出现的单词的解决方案。这就是我的处理方式。

  1. 通过循环遍历句子来查找单词数,如果找到空格或到达句子末尾,则增加单词计数变量。创建一个这个长度的单词数组。
  2. 使用一个变量作为每个单词的开头,另一个变量作为每个单词的长度,再次循环遍历句子并将前面的字符分配给单词数组的一个元素。
  3. 对于每个单词数组元素,循环遍历单词数组的每个元素,并进行比较(嵌套循环)。如果匹配,则增加计数数组中该位置的值,以显示每个单词出现的次数。
  4. 遍历 count 数组并将每个字段中的值与目前找到的最大值进行比较。这给出了最大数量,因此是最常用的词。输出那个词。

    公共子 FindCommonWord()

    Dim Insentence As String Dim WordArray() As String Dim CountArray() As Integer Dim p As Integer '字开始 Dim q As Integer '字长 Dim w As Integer '字数 Dim tw As String '这个字 Dim R As Integer '位置最常用的词

    p = 1 w = 1

    Insentence = ActiveSheet.Range("A1").Value '将句子赋值给一个字符串

    '遍历所有字符并计算单词数 For h = 2 To Len(Insentence) + 1 '遍历输入句子的所有字符 If (Mid(Insentence, h, 1) = " " Or h = Len( Insentence) + 1) Then '这个字符是空格或者这是句子的结尾 w = w + 1 End If Next h

    w = w - 1

    ReDim WordArray(w) ReDim CountArray(w)

    w = 1 '遍历所有字符并将单词分配给数组元素 For i = 2 To Len(Insentence) + 1 '遍历输入句子的所有字符 If (Mid(Insentence, i, 1) = " "或者 i = Len(Insentence) + 1) Then '这个字符是空格或者这是句子的结尾 q = i - p '设置字长为这个位置的个数减去这个开始的位置word WordArray(w) = Mid(Insentence, p, q) p = i + 1 '下一个单词的位置 w = w + 1 '下一个单词 End If Next i w = w - 1 '到达最后一个单词

    '遍历数组以处理每个单词 For j = 1 To w '遍历数组并计算该单词出现的次数 For k = 1 To w If UCase(WordArray(k)) = UCase(WordArray(j )) 然后 CountArray(j) = CountArray(j) + 1 下一个 k 下一个 j

    R = 1

    '在count数组中求最大值 For n = 1 To w If CountArray(n) > R Then R = n Next n MsgBox ("最常见的词是" & WordArray(R) & "在位置" & R & “。”)

    结束子

于 2015-07-12T19:58:17.647 回答