2010-08-15 35 views
5

Tôi đang tìm kiếm các ví dụ về các vấn đề giả mã mà bạn có thể đã được hỏi trong một cuộc phỏng vấn hoặc được yêu cầu đại diện như một phần của công việc hoặc giáo dục của bạn. Tôi không tìm kiếm các ví dụ từ bất kỳ tên miền nào cụ thể, vì vậy nó có thể liên quan đến các mẫu thiết kế, thuật toán, cấu trúc dữ liệu, chiến lược lưu trữ, mọi thứ liên quan đến Kỹ thuật phần mềm và Phát triển, đơn giản hoặc phức tạp.Câu hỏi giả, câu đố và thách thức phổ biến

Ví dụ, một số những người chung tôi đã tìm thấy chủ yếu là liên quan đến phân loại và tìm kiếm các kỹ thuật:

Bubblesort:

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 

Insertion sort:

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; 

Binary search:

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 
    } 

Chúng tôi có thể xây dựng danh sách các thuật toán và vấn đề giả dạng phong nha, nếu nhiều người chia sẻ suy nghĩ và kinh nghiệm của họ.

Tôi đang tìm cách tự giới thiệu bản thân giả, như thực hành. Vì vậy, ngay cả khi bạn không thể tìm thấy một ví dụ giả, nhưng bạn nghĩ rằng nó sẽ là một khái niệm lý tưởng để đại diện theo cách này, điều đó cũng sẽ giúp ích.

Tôi cũng có một vài câu hỏi liên quan đến chủ đề quá:

  • Mà giả đã bạn được yêu cầu viết trong một cuộc phỏng vấn trước đây?
  • Những câu hỏi này có liên quan đến các thuật toán ngắn, đơn giản dài một hoặc hai hàm không?
  • Có nên tránh các cấu trúc ngôn ngữ cụ thể khi viết mã giả không? Vì biểu diễn có nghĩa là không thuyết phục về ngôn ngữ, có an toàn hơn khi không sử dụng các thuật ngữ như Vứt bỏ và bỏ qua không tồn tại trong mỗi ngôn ngữ?

Cảm ơn


Edit:

Một vài ví dụ về một số chi tiết tôi đã tìm thấy, tôi sẽ giữ chỉnh sửa như tôi tìm thêm:


Viết một hàm có một chuỗi đơn để đảo ngược thứ tự các từ trong một câu, không đảo ngược các từ:

Đầu vào: "Con mèo ngồi trên tấm thảm, với con mèo khác!"

Output: "mèo khác với mat, về ngồi mèo Các"


Viết một hàm mang theo một chuỗi duy nhất mà sẽ trả lại từ đó xảy ra nhất trong chuỗi mà, bỏ qua vụ án và dấu chấm câu . Nếu có nhiều hơn một từ có cùng số lần xuất hiện, hãy trả về một từ xuất hiện trước:

Nhập: "Con mèo ngồi trên tấm thảm, với con mèo khác!"

Output: các


Viết một chức năng để tìm ra nhân vật có số lượng cao nhất của lần xuất hiện trong một chuỗi nào đó, bỏ qua trường hợp Nếu có nhiều hơn một ký tự với lần xuất hiện cao nhất bằng nhau, trở lại. các nhân vật xuất hiện đầu tiên trong chuỗi

Input:. "Character"

Output: c


Viết một hàm đảo ngược một chuỗi

Input: "đảo ngược"

Output: "esrever"

+0

Nếu bạn đang viết mã giả, bạn nên cố gắng để thể hiện các thuật toán như rõ ràng và chính xác nhất có thể. Điều đó thường có nghĩa là bỏ qua quản lý tài nguyên rõ ràng, nhưng sử dụng những thứ như "yếu tố foreach trong somecollection", ngay cả khi không có tương tự trực tiếp trong một số ngôn ngữ. –

Trả lời

1

tôi đã không bản thân mình bao giờ được yêu cầu viết pseudo-code trong một cuộc phỏng vấn (vẫn còn một sinh viên), nhưng một người bạn của tôi đã đăng ký Google cho một công việc mùa hè đã được yêu cầu viết một trình phân tích cú pháp regexp có thể xử lý một tập con của regexps (iirc, chỉ nhập chữ và số và sử dụng ký hiệu *, + và {x, y}). Tôi đang xem xét áp dụng cho họ vào năm tới cho một công việc mùa hè bản thân mình và đang sợ hãi bởi ý tưởng cố gắng để viết một cái gì đó như thế tại chỗ XD.

Tôi tin rằng anh ấy đã giải quyết nó bằng cách sử dụng hai chức năng được lặp lại với nhau. Không chắc chắn như thế nào.

Ồ, anh ấy không chỉ được yêu cầu viết mã giả cho điều này, btw. Ông được yêu cầu viết mã C++ thực tế, ngay tại chỗ, sẽ biên dịch. (Cũng trong tài liệu Google Documents).

3

Tôi chưa được hỏi, nhưng có câu hỏi FizzBuzz cổ điển.

Viết chương trình in số từ 1 đến 100. Nhưng đối với bội số của ba chữ "Fizz" thay vì số và cho bội số của năm in "Buzz". Đối với các số là bội số của cả ba và năm in "FizzBuzz".

như được tìm thấy tại http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

Nó có nghĩa là một câu hỏi sàng lọc đơn giản, và không gây bất kỳ khó khăn đáng kể cho các lập trình viên thậm chí rất mới.

1

tôi đã được yêu cầu viết một giải pháp pseudo-code cho điều này trong một cuộc phỏng vấn cho chương trình thực tập một vài năm trước đây:

Viết một thuật toán, đưa ra một đường dẫn thư mục, có thể đếm tổng số file nằm trong thư mục đó và tất cả các thư mục con.

Có thể giải quyết điều này thể hiện sự hiểu biết về truyền tải cây.

+0

Tốt nhất. Tôi cần thêm các ví dụ về các vấn đề đệ quy ngắn – fletcher

0

Tôi mất nhiều thời gian để tìm ra, nhưng đây là giải pháp Excel VBA của tôi cho vấn đề đảo ngược câu.

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 
0

Tôi không biết đây có phải là cách tiếp cận trang nhã nhất không, nhưng đây là giải pháp để tìm từ xảy ra thường xuyên nhất. Đây là cách tôi tiếp cận nó.

  1. Tìm số từ bằng cách lặp qua câu và tăng biến đếm từ nếu bạn tìm thấy dấu cách hoặc bạn đến cuối câu. Tạo một mảng từ có độ dài này.
  2. Sử dụng một biến cho đầu mỗi từ và một biến khác cho độ dài của mỗi từ, lặp lại câu đó và gán các ký tự trước đó cho một phần tử của mảng từ.
  3. Đối với mỗi phần tử mảng từ, lặp qua từng phần tử của mảng từ và so sánh nó (vòng lặp lồng nhau). Nếu có một kết quả phù hợp, hãy tăng giá trị cho vị trí đó của một mảng đếm cho biết số lần mỗi từ xuất hiện.
  4. Lặp qua mảng đếm và so sánh giá trị trong từng trường với giá trị tối đa được tìm thấy cho đến thời điểm này. Điều này cho số lượng tối đa và do đó từ phổ biến nhất. Xuất ra từ đó.

    Public Sub FindCommonWord()

    Dim Insentence As String Dim WordArray() As String Dim CountArray() As Integer Dim p As Integer 'Lời Bắt đầu q Dim As Integer' chiều dài Lời Dim w như Integer 'Word Count Dim tw As string' này lời Dim R như Vị trí của từ phổ biến nhất Integer'

    p = 1 w = 1

    Insentence = ActiveSheet.Range ("A1").Giá trị 'Gán câu cho một chuỗi

    ' lặp qua tất cả các ký tự và đếm số từ Đối với h = 2 Đến Len (Insentence) + 1 'Lặp qua tất cả các ký tự của câu đầu Nếu (Trung bình) Insentence, h, 1) = "" Hoặc h = Len (Insentence) + 1) Sau đó 'Ký tự này là dấu cách hoặc đây là kết thúc của câu w = w + 1 Kết thúc Nếu Tiếp theo h

    w = w - 1

    ReDim WordArray (w) ReDim CountArray (w)

    w = 1 'lặp qua tất cả các ký tự và gán các từ cho các thành phần của mảng Đối với i = 2 Đến Len (Insentence) + 1' Lặp qua tất cả các ký tự của câu đầu vào Nếu (Giữa (Insentence, i) , 1) = "" Hoặc i = Len (Insentence) + 1) Sau đó 'Ký tự này là dấu cách hoặc đây là kết thúc của câu q = i - p' Đặt độ dài từ thành số vị trí này trừ đi vị trí bắt đầu của từ này WordArray (w) = Giữa (Insentence, p, q) p = i + 1 'Vị trí của từ tiếp theo w = w + 1' Từ tiếp theo Kết thúc Nếu Tiếp theo i w = w - 1 'Từ cuối cùng đạt đến

    'lặp qua mảng để làm việc trên từng từ Đối với j = 1 Để w ' lặp qua mảng và đếm số lần từ này xuất hiện Cho k = 1 Đến w Nếu UCase (WordArray (k)) = UCase (WordArray (j)) sau đó CountArray (j) = CountArray (j) + 1 Tiếp theo k Tiếp j

    R = 1

    'Tìm giá trị lớn nhất trong mảng đếm Đối với n = 1 Để w Nếu CountArray (n)> R Sau đó R = n Tiếp theo n MsgBox ("The mos t từ chung là "& WordArray (R) &" ở vị trí "& R &". ")

    End Sub