Ai có cách làm hay hơn thì chia sẻ nhé
À bỏ cái #include <math.h> đi nhé
HackerRank : Day 10
Bakf trong hacker rank ngày 10 đó bạn
nói nhanh đề bài đi cho gọn bạn
chứ lười reg nó lắm, reg là phải làm hết
Chuyển từ interger qua bit và đếm xem cdayx các số 1 liền kề nhau nào lớn nhấT vàcos bn số
thật là đọc k hiểu đang ghi gì luôn ấy :’(
Chuyển từ interger qua nhị phân
Ví dụ nhé
số 155 --> 10011011
Như vậy rồi đếm xem số số 1 kề nhau lớn nhất là bao nhiêu
Ở đây là 2
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int mx = 0;
int n, cnt = 0;
cin >> n;
while (n){
if (n & 1)
cnt++;
else{
mx = max(mx, cnt);
cnt = 0;
}
n >>= 1;
}
mx = max(mx, cnt);
cout << mx;
return 0;
}
vậy thì thế này gọn hơn
ông chuyển sang binary đoạn nào thế @@
à cái của tôi bỏ cái thư viện math.h đi nhé,chỉ cần thư viện std + cái bitset thôi
không nhất thiết phải chuyển sang hệ nhị phân, vừa chuyển vừa tính luôn
Hay,vừa test thì đúng thế.để đọc code xem sao,thanks nhé
Cái mx = max(mx, cnt) là để so sánh 2 cái cái nào lớn hơn hả c?
hay thì phải like share subscribe chứ
return về max value của 2 tham số
n >>= 1 là gán giá trị 1 cho n hả ông :)))
n >>= 1 tương đương n = n >> 1
phép dịch bit, dịch sang phải 1 bit
tương đương n = n / 2
tui vẫn chưa hiểu ông chuyển sang nhị phân kiểu gì
Ông viết riêng cái code chuyển sang nhị phân tui xem đc ko
trong code này nếu nói “chuyển nhị phân” thì không hề có, nhưng bản thân cái biến n khi lưu xuống thì nó đã được biểu diễn ở dạng nhị phân rồi, chỉ đang đem nó ra xài thôi :))
Tức là khi ông sài n >>= 1 thì ví dụ
0 0 0 1 1 1 0 0 1 1
1 2 3 4 5 6 7 8 9 0
Thì nó ở vị trí thứ 1 chuyển sang vị trí thứ 2?
Giá trị của N trong các vòng lặp lần lượt sẽ là:
155 - 77 - 38 - 19 - 9 - 4 - 2 - 1 - 0
nếu để ý bit cuối của từng giá trị
ta sẽ thấy là
1 - 1 - 0 - 1 - 1 - 0 - 0 - 1
thì cái này có phải chính là biểu diễn ngược của 155 ở hệ nhị phân không :3