Challenge: Tìm số lớn nhất trong 5 số nguyên

Mặc dù đọc phép toán bit không hiểu gì nhưng vẫn like :joy:

1 Like

Theo mình thì nếu dùng 5if thì nó là vét cạn còn nếu dùng <= 3if thì nó luôn tìm ra nghiệm gần đúng nhoặc đúng với nghiệm cần tìm. Nó cơ bản gần giống với thuật toán IDA(Iterative deepening search) giới hạn chiều sâu tìm kiếm. Nếu bạn làm những bài cơ bản về trí tuệ nhân tạo thì thấy nó khá là hay. Một chút ý kiến nho nhỏ xin đừng gạch đá.

Lấy trị tuyệt đối bản chất vẫn là if mà ?

cách này nếu đầu vào là số 64bits thì phải chỉnh lại, và còn tùy thuộc vào endianness nữa

Cùng hệ và shift không sợ endian. Chừng nào bạn pack hoặc dùng mask kiểu 0x8000… mới có vấn đề.

1 Like

oh giờ mình mới biết endian không ảnh hưởng shift. cảm ơn bạn

Lỡ em lại dùng 64 thì chắc con này có cho kết quả đúng không? khi chỉ lấy bit đầu tiên của bác?

Đề bài chỉ nói là không dùng if thôi mà. Còn muốn dùng cái gì thì tuỳ người code chứ =)))

c >> (sizeof(c)*8 - 1)
thế này chắc là được

3 Likes

Chặn cho từng trường hợp thôi, mình chỉ làm thử trên int

1 Like

nếu chỉ cần biết c < 0 hay c > 0 thì cho k = c < 0 luôn vẽ ra cái bit trick làm gì, đề ko yêu cầu if chứ có thể xài so sánh thoải mái mà :dizzy_face:

int max(int a, int b) { return a - (a < b) * (a - b); }
2 Likes

Cũng là một cách khác

1 Like

ầy nhưng mà nhiều ngôn ngữ không cho phép làm như vậy, thuật toán đa ngôn ngữ vẫn hơn chứ :slight_smile:

ngôn ngữ nào chả cho phép biến kiểu bool thành kiểu int, mất công viết thành 2-3 dòng thôi. Nếu ko cho thì đốt ngôn ngữ đó đi.

1 Like

Ngay từ đầu đã nói ngôn ngữ nào cũng chơi tuốt thì càng phải sử dụng cú pháp đặc trưng chứ. Không thì chỉ có thể viết rặt 1 kiểu.

1 Like

ko cho dùng mảng là hết mún làm

C# không ép từ bool sang int được.

Convert.ToInt32(a < b)

.NET Framework
Available since 1.1

Java hình như phải xài ? :, đề nghị đốt Java.

1 Like

bác nghĩ so với phép dịch bit thì số phép tính của bác nhanh hay chậm hơn?

compile ra thấy 2 cái như nhau:

https://godbolt.org/g/nMZVZD

nó optimize xuống còn có 1 cái shr 31 là xong @_@

cái hàm 1 dòng thì bị dư thêm 1 lệnh xor eax eax set eax = 0 ko biết để làm gì @_@

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?