01/10/2018, 08:54

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.

Nguyen Ca viết 10:55 ngày 01/10/2018

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
Đăng Trần viết 11:07 ngày 01/10/2018

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 à .

*grab popcorn* viết 10:58 ngày 01/10/2018

Đề 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

s = 1

for i = 0..7
 count += (number & s << i) != 0
Nguyen Ca viết 11:03 ngày 01/10/2018

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

Đăng Trần viết 11:00 ngày 01/10/2018

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?

Đăng Trần viết 11:09 ngày 01/10/2018

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ố.

*grab popcorn* viết 10:59 ngày 01/10/2018

Đ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

21 = 16 + 4 + 1 -> 3 bit

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

Vesper Link viết 11:06 ngày 01/10/2018

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.

Đăng Trần viết 10:59 ngày 01/10/2018

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ý.

Nguyễn Hoàng viết 11:03 ngày 01/10/2018

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

Nguyễn Hoàng viết 10:55 ngày 01/10/2018

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

Đăng Trần viết 11:09 ngày 01/10/2018

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!

Nguyễn Hoàng viết 11:07 ngày 01/10/2018

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

rogp10 viết 11:04 ngày 01/10/2018

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

Vesper Link viết 10:59 ngày 01/10/2018

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 !

Bài liên quan
0