Tải bản đầy đủ (.pdf) (11 trang)

Các câu hỏi phỏng vấn pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (132.59 KB, 11 trang )

Các câu hỏi phỏng vấn
Microsoft nổi tiếng là có các câu hỏi phỏng vấn nhân viên mới mang
tính kỹ thuật theo dạng đố “mẹo” (đa số là về thuật toán hoặc lập trình
C/C++). Có nhiều bộ sưu tập các câu hỏi dạng này đã từng được hỏi ở
các cuộc phỏng vấn ở Microsoft. Gần đây Google cũng phỏng vấn theo
kiểu tương tự. Mỗi câu trả lời chỉ được cho khoảng 5-10 phút suy nghĩ.
Đôi khi người ta quan tâm đến quá trình suy nghĩ của bạn hơn là bản
thân câu trả lời.Trong chuỗi bài này sẽ nêu chọn lọc một số câu hỏi . Các
câu hỏi được chọn không nhất thiết là khó nhất, tiêu chuẩn là gọn gàng
và đẹp.
· 1. Cho một danh sách liên kết đơn (simple linked list) hữu hạn. Có hai
trường hợp: một là cuối danh sách trỏ về NULL, hai là trỏ về một phần
tử đã gặp – tạo nên một vòng tròn trong danh sách.
Ví dụ trường hợp 1: A –> B –> C –> D –> NULL.
Ví dụ trường hợp 2: A –> B –> C –> D –> E –> F –> C.
Cho trước một con trỏ vào một danh sách liên kết đơn L nào đó, hữu hạn
nhưng có thể có độ dài tùy ý. Làm thế nào để kiểm tra nhanh nhất nếu
danh sách L thuộc trường hợp 1 hay trường hợp 2, với điều kiện là ta chỉ
được dùng vài chục bytes bộ nhớ.
2. Cho một chuỗi ký tự s bao gồm nhiều từ. Viết một đoạn chương trình
C đảo thứ tự các từ.
Ví dụ: với input là “this is a nice blog” thì output là “blog nice a is this“.
3. Cho hai dãy số đã xếp thứ tự tăng dần A và B, mỗi dãy có n phần tử.
Xét tập hợp sau:
S = { A[i] + B[j] | 1
4. Chỉ với các phép tính cộng, trừ, nhân, chia, các hàm lượng giác, phép
lũy thừa, và phép lấy căn, cùng với ba số 2, làm thế nào để viết một biểu
thức định trị ra 2005? (Gợi ý: 2005 không có gì đặc biệt, số nguyên
dương nào cũng được.) [Câu này tôi biết qua chị Hà Dương, lúc giải ra
rất thích! Đơn giản và độc đáo]
5. Bụt, diêm vương, và Tèo đứng trước mặt bạn. Bụt và diêm vương cái


gì cũng biết. Tèo thì cái biết cái không. Bụt luôn nói thật, diêm vương
luôn nói dối. Với 3 câu hỏi có/không, mỗi câu chỉ hỏi một trong ba đối
tượng, xác định ai là ai.
6. Cho a và b là các số nguyên dương, nguyên tố cùng nhau. Tìm công
thức tính số nguyên lớn nhất không thể viết dưới dạng ax+by, trong đó x
và y là các số nguyên không âm.
7. Cho hai sợi dây dài, làm bằng các vật liệu khác nhau, có mật độ vật
chất khác nhau ở các điểm khác nhau của từng sợi. Cho biết mỗi sợi dây
cháy trong đúng một giờ thì hết. Dùng hai sợi dây (và diêm) để đo 45
phút.
8. Cho hai hình lập phương. Ta phải gán các chữ số 0-9 (mỗi mặt một
số) ra sao để có thể dùng hai hình lập phương biểu diễn được tất cả các
ngày trong tháng.
9. Những điểm nào trên quả địa cầu (giả sử là đúng hình cầu) có tính
chất sau đây: đi về phía Nam 1km, sau đó về phía Tây 1km, sau đó về
phía Bắc 1km thì quay lại điểm cũ.
0. Cho một mảnh giấy hình chữ nhật với một lỗ hổng hình chữ nhật ở
giữa.
Hỏi: Dùng dao cắt mảnh giấy một nhát như thế nào để có hai nửa có
diện tích bằng nhau?
11. Có 500 cái cửa nằm dọc theo một hành lang đánh số từ 1 đến 100.
Lúc đầu các cửa đều đóng. Có 500 người xếp hàng đi dọc hành lang.
Anh thứ nhất mở tất cả các cửa; anh thứ hai chuyển trạng thái (mở thành
đóng, đóng thành mở) các cửa 2, 4, 6, …; anh thứ ba chuyển trạng thái
các cửa 3, 6, 9, …; cứ như vậy đến anh thứ 500 chuyển trạng thái cửa
500.
Hỏi: cuối cùng có bao nhiêu cửa đóng?
12. Có hai căn phòng nằm cạnh nhau nhưng không thông nhau, và đứng
bên này không thấy bên kia. Phòng 1 có ba cái đèn bóng tròn. Phòng 2
có ba công tắc của ba đèn ở phòng 1. Bạn là người lạ, được dẫn vào

phòng 2 trước, được quyền nghịch ngợm tắt mở công tắc tùy ý. Sau đó
bạn được sang phòng 1 kiểm tra đèn.Hỏi: nghịch thế nào ở phòng 2 để
biết công tắc nào tương ứng với đèn nào?
13. (Bài toán Monty Hall) Monty Hall làm MC của một trò chơi trên
truyền hình. Có ba cái cửa chắn trước người chơi. Đằng sau một trong
các cánh cửa là phần thưởng. Bạn chọn một trong ba cánh cửa. Monty
Hall xem đằng sau hai cánh còn lại và mở một cửa không có phần
thưởng.
Hỏi: bạn sẽ giữ chọn lựa cũ hay đổi sang cửa còn lại để lấy phần
thưởng? Tại sao?
14. Tèo yêu hai cô gái Tấm và Cám. Cả ba sống trên cùng một con
đường, Tèo ở đoạn giữa. Các xe buýt đi cả hai chiều của con đường, mỗi
chiều một tiếng một lần có xe buýt đến (tốc độ đều). Sáng sáng Tèo ra
bến xe buýt và đón xe nào đến trước thì đi về hướng ấy. Sau một thời
gian dài thì Tèo đi thăm Tấm gấp ba lần đi thăm Cám.
Hỏi: sao lại thế được
15. Có hai xe tải đứng đối diện nhau, cách nhau 100km. Xe 1 có tốc độ
50km/h, xe 2 có tốc độ 30km/h, một con ruồi đậu trên mũi xe 1 bay qua
bay lại giữa hai mũi xe với tốc độ 5000km/h. Cả hai xe và con ruồi đều
xuất phát cùng một lúc.
Hỏi: đến khi con ruồi bị đè bẹp gí giữa hai xe (đụng nhau) thì con ruồi
bay được bao xa?
16. Cho một linked list (danh sách liên kết) và pointer đến đầu linked
list. Ta không biết trước tổng số phần tử trong list là bao nhiêu. Viết một
function trả về pointer đến một phần tử ngẫu nhiên trong list (uniform
distribution), mà chỉ được duyệt qua linked list 1 lần. (Nghĩa là không
được đếm tổng số phần tử n, chọn ngẫu nhiên từ 1 đến n, rồi duyệt lần 2
để trả về con trỏ ngẫu nhiên.)
17. Cho một array *A* các ký tự trong một bộ ký tự nào đó, và một tập
*S* của vài ký tự. Viết một function chạy trong thời gian tuyến tính,trả

về sub-array nhỏ nhất của *A* chứa tất cả các ký tự trong *S*.
18. Cho một ma trận m hàng n cột. Các con số trên các hàng đều tăng
dần từ trái sang phải, và trên các cột đều tăng dần từ trên xuống dưới.
Viết một thủ tục tìm một số xem nó có trong ma trận không? Thời gian
chạy là bao nhiêu? *Lưu ý*: đây là phiên bản 2-D của binary search.)
19. Ba người thuê một phòng khách sạn. Họ đưa cho anh bảo vệ 30 đô.
Anh bảo vệ đưa cho người quản lý, nhưng người quản lý trả lại 5 đô vì
giá phòng chỉ có 25. Cầm 5 đô, không biết làm sao chia cho 3 người,
anh bảo vệ cầm lấy 2 đô xem như tiền boa, còn lại đưa mỗi người 1 đô.
Mồi người bỏ ra 10 đô, lấy lại 1 đô, vị chi là mỗi người 9 đô – tổng cộng
27 đô. Anh bảo vệ lấy 2 đô nữa là 29 đô. Vậy còn 1 đô đi đâu?
20. Có n người, trong đó một số luôn nói thật, một số lúc thật lúc dối
không biết đâu mà lường. Ta phải phỏng vấn đám người này và chỉ ra tất
cả những người luôn nói thật. Những người này biết thông tin thật/dối
của tất cả những người còn lại. Các câu hỏi chỉ có thể ở dạng: “hỏi anh
A xem anh B thuộc loại nào”.
(i) Nếu biết trước hơn nửa số người thuộc dạng luôn nói thật, tìm chiến
thuật phỏng vấn chỉ cần n-1 câu hỏi.
(ii) Có tồn tại chiến lược phỏng vấn nào không nếu chỉ có ít hơn nửa
luôn nói thật?
(iii) Giả sử ta tìm được 1 anh nói thật. Dĩ nhiên ta có thể hỏi anh này n-1
câu để biết tất cả những người còn lại thuộc loại nào. Có cách nào tốt
hơn không?
21. An, Bình, Chung, Dung phải qua cầu khỉ vào buổi tối. Chỉ có một
cái đèn pin. Tối đa là hai người đi cùng một lúc, và phải có đèn mới
qua/lại được. Họ đi với tốc độ khác nhau. Nếu hai người cùng đi thì cả
hai phải đi bằng tốc độ người đi chậm hơn.
An cần 1 phút.
Bình cần 2 phút.
Chung cần 5 phút.

Dung cần 10 phút.
Dĩ nhiên là phải có người cầm đèn đi ngược lại để đón người kế qua nếu
cần!
Hỏi: ít nhất họ cần bao nhiêu phút để cả 4 qua được cầu?
22. Có ba hộp kẹo, một toàn kẹo dừa, một toàn sô cô la, hộp còn lại thì
nửa này nửa nọ. Nhãn tất cả các hộp đều dán sai. Giả sử ta có một cục
kẹo của một hộp, đoán tất cả các hộp xem là gì.
23. Cho biểu thức 101 – 102 = 1, di chuyển một chữ số hoặc ký hiệu (-,
=) sao cho nó biến thành đẳng thức.
24. Cho một ly sữa và một ly cà fê cùng thể tích chất lỏng. Múc 1/10 ly
cà fê đổ vào ly sữa, sau đó múc 1/10 ly sữa cà fê đổ vào ly cà fê. Giả sử
cà fê và sữa hòa tan tuyệt đối.
Hỏi: sau khi đổ thì phần trăm cà fê và sữa ở hai ly ra sao?
25. Cho một dãy số A gồm n số thực: A[1], \dots, A[n]. Một dãy con của
A là một dãy liên tục các phần tử của A. Ví dụ: dãy A[2], A[3], \dots,
A[25] là một dãy con của A. Tìm một thuật toán chạy trong thời gian
O(n) để in ra dãy con có tổng lớn nhất của A. (Chú ý là A có thể lẫn lộn
các số âm, dương.)
26. Định nghĩa \log^{(i)} n = \log \log \dots \log n (i lần), và
\log^*n = \min\{ i \geq 0 \ : \ \log^{(i)} n \leq 1 \}
Hỏi: trong hai hàm \log^*(\log n) và \log(\log^*n) thì hàm nào tăng
nhanh hơn khi n lớn?
27. Viết một đoạn chương trình C để xác định xem máy chạy chương
trình là big-endian hay little-endian.
28. Viết một đoạn chương trình C để biết stack của một máy grow down
hay grow up?
29. Cho chuỗi S_1 = \{ a, b, c, d, \dots, x, y, z, aa, ab, ac, \dots \}. Biết
rằng chuỗi này có ánh xạ một-một đến chuỗi S_2 = \{1, 2, 3, 4, \dots \}.
Viết một chương trình để chuyển một phần tử của S_1 thành một phần
tử tương ứng của S_2. Viết chương trình chuyển theo chiều ngược lại.

30. Cho một hình vuông đơn vị, mô tả các điểm trong hình vuông này
mà nằm gần tâm hơn cạnh ngoài.
31. Có bao nhiêu số 0 ở đằng cuối của biểu diễn thập phân của n!?
32. Khi ta soi gương, giơ tay trái lên thì hình nhân trong gương giơ tay
phải của hắn. Tuy nhiên, khi ta cúi đầu thì hình nhân trong gương cũng
cúi đầu. Tại sao gương “lật” trái/phải, nhưng không “lật” trên/dưới?
33. Có 9 túi đựng tiền, mỗi túi chứa ít nhất 100 đồng tiền, trong đó có
một túi chứa toàn tiền giả. Các đồng tiền thật đều nặng 100 grams. Các
đồng tiền giả đều nặng 90 grams. Cho một cái cân đĩa (1 đĩa và đồng hồ
chỉ cân nặng), cân 1 lần để xác định túi nào chứa tiền giả?

×