haha, vui nhỉ, đến giờ em vẫn chưa hiểu đề
haha, vui nhỉ, đến giờ em vẫn chưa hiểu đề
Bó tay dot com. ) ) )
Thế này : Từ các chữ số của số đó, ta xóa đi một số vị trí. Khi đó ta thu được 1 số mới (gồm các chữ số còn lại giữ nguyên thứ tự). Số nào mà không tòn tại cách xóa để ra được là số cần tìm.
VD
12345678901234567890
số 1 nhận được bằng cách xóa hết các số trừ số thứ 1.
tương tự với 2 -> 9.
Số 10 nhận được bằng cách xóa : 12345678901234567890
tương tự ta có thể tạo thành đến số 99. bằng cách xóa :
12345678901234567890
Số 100 : 12345678901234567890
Tương tự : 101 có thể tạo ra được ... cho đến 110. 111 không thể tạo ra được.
Có ai giao đề chính thức đi chứ
Ơ kìa sao im re hết thế này
Làm 1 bài xả xì trét nhé ^^. Ko cần code , thuật toán thôi
Dùng TP
Cho 1 file , có n dòng ( n <= 1 triệu đi =)) ) Mỗi dòng là 1 số ( nhiều nhất là 10 chữ số đi =)) )
Trong đó có 1 nửa số các số là giống nhau . Tìm số đấy.
Have fun ^^
Ý anh là tìm số nào mà lặp lại >= n/2 lần trong file đúng ko ạ
Mình muốn đổi lại 1 chút là các số <2 tỷ thôi cho dễ biểu diễn. Thuật toán như sau:
Giả sử có n số.
Đổi tất cả các số ra nhị phân và đếm số lần xuất hiện của 0,1 ở các vị trí bit thứ 0,2,..31, nếu 1 số xuất hiện ít nhất n/2 lần => số lần xuất hiện của các bit của số đó tại tất cả các vị trí đều >= n/2.
Đọc file lần thứ 1, ta đếm số lần xuất hiện của các bit 0,1. Sau khi đếm xong ta có 1 số tạo bởi các bit (0,1,..31) có số lần xuất hiện nhiều nhất (gọi là x).
Đọc file lần 2, đếm số lần xuất hiện của x. nếu >= n/2 thì số đó là x, nếu ko thì ko có số nào xuất hiện quá n/2 lần.
Một cách giải hay ...
Nice nice. Suýt đúng đáp án ^^
Sao lại phải đổi ra bit làm gì , 10 chữ số là 10 chữ số ^^ ko đổi đề
// Đọc file lần 1
// Đọc file lần 2 để check lại kết quảCode:result:=0;count:=0; For i := 1 to n do begin read(f,k); if (k=result) then inc(count) else dec(count); if (count<0) then begin result:=k; count:=1; end; end;
...
Bookmarks