Thử thách của bạn:
Bạn đang ở tầng 0 của một tòa nhà cao vô hạn. Ở bất kỳ tầng nào, bạn có thể đi bộ đến cửa sổ và thả một quả trứng. Mục tiêu của bạn là tìm ra tầng cao nhất mà trứng có thể chịu được mà không bị vỡ. Tuy nhiên, bạn có tối đa 3 quả trứng để sử dụng để tìm ra điều này, nhưng bạn cần giảm thiểu số lần thử.
Về mặt chính thức:
- Bạn được cung cấp một hàm
f(n)
trả vềbool(n <= X)
cho một ẩn sốX
, trong đó0 <= X
- Bạn phải trả về giá trị của
X
(không truy cập trực tiếp) f(n)
chỉ phải trả lạiFalse
tối đa số3
lần (trong một trường hợp thử nghiệm). Nếu nó trả vềFalse
nhiều hơn thế, thì câu trả lời của bạn bị loại.
Những hạn chế
Điểm của bạn là tổng số cuộc gọi bạn thực hiện f(n)
(trong các trường hợp thử nghiệm bên dưới)
Nếu bạn muốn, bạn có thể từ bỏ chức năng và chỉ cần "mô phỏng" tình huống trên. Tuy nhiên , thuật toán giải của bạn phải không biết gì X
.
Thuật toán của bạn không nên mã cứng các trường hợp thử nghiệm, hoặc tối đa X
. Nếu tôi tạo lại các số hoặc thêm nhiều hơn, chương trình của bạn sẽ có thể xử lý chúng (với số điểm tương tự).
Nếu ngôn ngữ của bạn không hỗ trợ các số nguyên chính xác tùy ý, thì bạn có thể sử dụng long
kiểu dữ liệu. Nếu ngôn ngữ của bạn không hỗ trợ, thì bạn đã hết may mắn.
Trường hợp thử nghiệm thứ n được tạo bằng cách sử dụng như sau:
g(n) = max(g(n-1)*random(1,1.5), n+1), g(0) = 0
hoặc khoảng 1.25^n
Các trường hợp thử nghiệm:
0,1,2,3,4,6,7,8,10,14,15,18,20,27,29,40,57,61,91,104,133,194,233,308,425,530,735,1057,1308,1874,2576,3162,3769,3804,4872,6309,7731,11167,11476,15223,15603,16034,22761,29204,35268,42481,56238,68723,83062,95681,113965,152145,202644,287964,335302,376279,466202,475558,666030,743517,782403,903170,1078242,1435682,1856036,2373214,3283373,4545125,6215594,7309899,7848365,8096538,10409246,15103057,20271921,22186329,23602446,32341327,33354300,46852754,65157555,93637992,107681394,152487773,181996529,225801707,324194358,435824227,579337939,600264328,827690923,1129093889,1260597310,1473972478,1952345052,1977336057,2512749509,3278750235,3747691805,5146052509
Đây là một thử thách mã , và người có điểm thấp nhất sẽ thắng!