Bất cứ ai tham gia tối ưu hóa mã ở mức độ thấp đều biết về sự nguy hiểm của việc phân nhánh, được thực hiện dưới dạng câu lệnh if, vòng lặp hoặc câu lệnh chọn, khả năng hiểu sai nhánh là một điều lãng phí đồng hồ khủng khiếp.
Các vấn đề đơn giản có thể được giải quyết tốt hơn nhiều với số học đơn giản, vì vậy hãy làm điều đó.
Đối với các vấn đề sau, tất cả các biến là số nguyên không dấu 32 bit và mã được phép duy nhất là các câu lệnh được đặt đơn giản chỉ liên quan đến các toán tử sau:
+ addition
- subtraction
* multiplication
/ integer division, rounds down, division by 0 not allowed
% modulo
& binary and
| binary or
^ binary exclusive or
>> bitshift right
<< bitshift left
Logic operators, return 1 if the expression is true and 0 if it is false.
== equal
!= not equal
< less than
<= less than or equal
> greater than
>= greater than or equal
Set operator
=
Mỗi dòng phải bao gồm một định danh biến được theo sau bởi một toán tử tập hợp, theo sau là một biểu thức.
Một biểu thức có thể không chứa các toán tử tập bổ sung, nhưng có thể chứa các định danh biến, số bằng chữ và dấu ngoặc đơn.
Điểm đánh gôn chỉ được tính số lượng người điều khiển.
Thí dụ:
myvar = ( ( ( foo + 5 ) * bar ) % 7 ) == 3
Có số điểm 5 nhà khai thác.
Một giải pháp có thể bao gồm nhiều biến như tác giả thấy phù hợp.
Các biến chưa được đặt có giá trị 0
.
Tràn và underflow được cho phép, tất cả số âm underflow, vì vậy 3 - 5
là 4294967294
, thậm chí như một phần của một tuyên bố lớn hơn.
Nhiệm vụ 1: Tối đa
Hai giá trị, A
và B
, tồn tại trong phạm vi, làm cho RESULT
biến chứa giá trị lớn nhất trong số các giá trị đó khi chương trình kết thúc.
Nhiệm vụ 2: Trung bình
Ba giá trị, A
, B
và C
, tồn tại trong phạm vi, làm cho RESULT
biến chứa trung bình của những giá trị khi chấm dứt chương trình.
Nhiệm vụ 3: Căn bậc hai
Một giá trị, A
tồn tại trong phạm vi, làm cho RESULT
biến chứa căn bậc hai của A
, được làm tròn xuống, khi chương trình kết thúc.
Bạn có thể đăng câu trả lời cho một hoặc hai câu hỏi, đối với một số bạn chỉ cần tìm giải pháp hợp lệ sẽ là một thách thức.
0xFFFF_FFFF_FFFF_FFFF ^ x
và 0 - x
. Làm thế nào tôi có thể quên?
!
cũng khá tầm thường : x == 0
.
Boole[a-b]
không?
-
nhưng~
có thể tốt (ngay cả khi tôi không biết để làm gì).