30/09/2018, 17:51
Bài toán tìm số, nằm trong khoảng 2 số nguyên dương cho trước, là tổ hợp lặp của 6 và 9
Đạt mới nhận được một câu hỏi như sau, có bạn nào muốn thử sức không?
Cho hai số nguyên dương A và B. Độ dài của A và B không quá 12 số. Tìm tổng số nguyên bao gồm cả A và B, sao cho các số ngày chỉ chứa 6 và 9. Ví dụ: 6, 9, 66, 69, 96, 99, 666, 999, 696, 699, 969, 966, 996, …
Ví dụ:
Nếu A=5 và B=70, ta có 4 số
Nếu A=3 và B=100, ta có 6 số
-
Cài đặt hàm sau
int GetTotalNumber(long long A, long long B)
{}
-
Độ phức tạp của cách bạn cài đặt?
Bài liên quan
nghe đến 69 là khoái rồi
e dùng thêm 1 hàm phụ nữa ko biết có đc ko nhỉ :v
EDIT: e quên mất, A,B là kiểu dữ liệu siêu to :3, bài này sai rồi :">
Mà quái lạ, VS2015 không tạo được project C++ nhỉ, toàn là visual C++ thôi @@
Chương trình này nhập vào số 1 và số 999999999999 xem thử mất bao lâu?
a,b kiểu int sao nhập nổi số đó a :v 12 số 9 là kiểu dữ liệu gì a:vsr e ko để ý nó kiểulong long
:vMà máy e cũng ko tạo đc project c++ để test dc nữa :v
vì chỉ có 2 số 6 và 9, mà A và B có tối đa 12 chữ số, vậy chỉ có tổng cộng 2 + 4 + 8 + 16 + … + 4096 = 8190 số chỉ có số 6 và 9 thôi. Viết 1 hàm tạo mảng X chứa 8190 số này theo thứ tự, coi như là constant time. Sau đó binary search A trong mảng X ra vị trí i sao cho X[i] nhỏ nhất và >= A, binary search B ra vị trí j sao cho X[j] lớn nhất và <= B. Kết quả là j - i + 1. Tuy tìm nhị phân thì có độ phức tạp là log(n) nhưng n ở đây là constant (8190) nên cũng coi như constant time O(1).
up thêm cái code, nếu xài C++11 thì có cái
auto
thì xàistd::distance
để tính khoảng cách giữa iteratori
vàj
, khỏi mất công trừN69.begin()
để lấy index:A, B kiểu
long long
emcode của e đây ạ độ phức tạp của nó là O(2^12) ạ