Test IQ lập trình

Vừa rồi mình mình gặp bài test có câu như sau:
Bạn hãy tính tổng các bit 1 của các số nguyên 1 byte.
Mình không hiểu bit 1 ở đây là bit ở vị trí 1 hay là giá trị ở vị trí đó là 1 (0, 1). Ai có kinh nghiệm giải đáp giúp mình.
Thanks in advance.

Theo cách ta hiểu là tính tổng giá trị các các bit 1 của số nguyên 1 bye
ví dụ

011
110
1+1+1+1 = 4

Bài này theo mình là nhị phân hết những con số 1 byte sao đó tính tổng số lần bit 1 xuất hiện. Giờ mà kêu giải chắc lâu à :smile: .

Đề ntn thì mình nghĩ như ý của 2 anh trên.

Còn cách giải liên quan tới trọng số Hamming.
Cách làm thì có thể check từng bit 1 ở từng bị trí rồi đếm hoặc tham khảo trên Google có nhiều cách ảo lắm :smiley:

s = 1

for i = 0..7
 count += (number & s << i) != 0
3 Likes

tưởng giải tay bằng toán chứ =))

1 Like

:smile: chết mất, lỡ thầy bắt giải bằng tay thì quỳ. Nhưng nghĩ lại bài này khá hấp dẫn đây, có ai không cần đếm mà ra được kết quả không ta?

1=00 00 00 01
2=00 00 00 10
3=00 00 00 11
Có 1 cái logic ai phát hiện ra thì chắc khỏi phải đếm bit từng số.

Đc chứ anh,
Mình chơi cộng, vì chỉ 1 byte nên nhớ từ 2^0 -> 2^7 rồi cộng dần vô là được :penguin:

21 = 16 + 4 + 1 -> 3 bit

204 = 128 + 64 + 8 + 4 -> 4bit :smiley:

2 Likes

Câu này là câu test IQ nên mình nghĩ là có một quy luật nào đó để tính nhẩm nhanh thôi, vì đề rất dài mà câu này chiếm trọng số rất ít.

Nếu bài này mà mở rộng lên dãy số 32 bit thì phải thay đổi cách tính rất lớn thì mới khả thi. Nhưng để tính theo cách khác lập để đếm thì phức tạp rồi hy vọng mai có thời gian giải bài này theo hướng không đếm. Lâu lâu cũng cho hại não tý.

câu này đơn giản mà. tổng = tổng các số từ số 1 cho đến số (1 * 2^0 + 1 * 2^1 + 1* * 2^2 + 1 * 2^3 + 1 * 2^4 + 1*2^5 + 1 * 2^6 + 1 * 2^7). số các số này chắc chắn sẽ là một số lẻ vì trong dãy này chỉ có 1 * 2^0 là số lẻ. đến đây bài toán là dạng tính tổng các chữ số từ 1 đến n với n là số lẻ, bài này thì quá quen thuộc với các bạn học sinh rồi

ak hình như đọc nhầm đề luôn rồi :v

Thôi xong, bài này tính theo tổ hợp, chỉnh hợp gì đó quên mất mấy bài toán rồi. Anh em nào thỏa mãn dùm mình với quên cách tính dụ này rồi!

nếu như theo đề bài của bạn thì đây là kết quả, bạn có đáp an so xem đùng không. đố bạn nào biết tính thế nào; tổng số bit 1 = 18 + 287 + 3876 + 48765 + 587654 + 6876543 + 78765432 + 887654321

Tính tổng số phần tử của power set 2^S :slight_smile: đúng không nhỉ.

Mình tính ra rồi:

Vì ở đây dùng 1 byte = 8 bit nên sẽ có 2^8 = 256 số
=> Tổng số lượng bit 0 và bit 1 của 256 số này là 256*8. 
Rỏ ràng số phần tử 0 và 1 trong tập hợp này là bằng nhau 
nên số phần tử 1 là 256*8/2 = 1024.

Thank you for your care !

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