Tạo chuỗi & Sắp xếp ký tự chuỗi ngẫu nhiên theo điều kiện (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

longpc84

Thành viên mới
Tham gia
5/6/09
Bài viết
8
Được thích
0
Mọi người cho em hỏi?
Có 2 ký tự A và B, làm sao để Đưa ra danh sách sắp xếp ngẫu nhiên gồm 256 hàng, mỗi hàng gồm 8 ký tự A và B (hoặc mỗi A hoặc mỗi B) sao cho các hàng không trùng nhau. Rồi sau đó lấy ngẫu nhiên 1 hàng, bỏ giá trị lấy được ra khỏi tâp hợp rồi tiếp tục lấy ngẫu nhiên hàng khác sao không trùng với hàng đã lấy trước đó. mọi người giúp đỡ với ạ, e không rành về vụ này lắm! cảm ơn
VD:
A A A A A A A A
A A A A B B B B
A B A B A B A B
A A B B A B A B
........................
B B B B B B B B
 
Lần chỉnh sửa cuối:
Mọi người cho em hỏi?
Có 2 ký tự A và B, làm sao để Đưa ra danh sách sắp xếp ngẫu nhiên gồm N hàng, mỗi hàng gồm 8 ký tự A và B (hoặc mỗi A hoặc mỗi B) sao cho các hàng không trùng nhau. mọi người giúp đỡ với ạ! cảm ơn
VD:
A A A A A A A A
A A A A B B B B
A B A B A B A B
A A B B A B A B
........................
B B B B B B B B
Gợi ý:
1> Đầu tiên bạn hãy xem A là số 0 và B là số 1. Vậy phối hợp 8 tự tự A, B lại với nhau, bạn sẽ có 1 chuỗi số nhị phân, đúng không?
2> Từ "00000000" đến "11111111" vị chi có 256 trường hợp. Vậy bài toán của bạn quy về: "Tạo 1 dãy số ngẫu nhiên không trùng từ 0 đến 255
3> Liên quan đến bài toán tạo số ngẫu nhiên không trùng đã có đầy trên GPE
4> Sau khi bạn có hàm tạo dãy số không trùng, chỉ cần áp dụng nó tạo dãy số n phần tử có giá trị từ 0 đến 255 (với n nguyên dương tùy ý và <256). Giải mã các con số thập phân tìm được ra nhị phân rồi đối 0 thành "A", 1 thành "B"
====> Vậy là xong!
 
Mọi người cho em hỏi?
Có 2 ký tự A và B, làm sao để Đưa ra danh sách sắp xếp ngẫu nhiên gồm N hàng, mỗi hàng gồm 8 ký tự A và B (hoặc mỗi A hoặc mỗi B) sao cho các hàng không trùng nhau. mọi người giúp đỡ với ạ! cảm ơn
VD:
A A A A A A A A
A A A A B B B B
A B A B A B A B
A A B B A B A B
........................
B B B B B B B B
-------
Trùng bài...
 
Gợi ý:
1> Đầu tiên bạn hãy xem A là số 0 và B là số 1. Vậy phối hợp 8 tự tự A, B lại với nhau, bạn sẽ có 1 chuỗi số nhị phân, đúng không?
2> Từ "00000000" đến "11111111" vị chi có 256 trường hợp. Vậy bài toán của bạn quy về: "Tạo 1 dãy số ngẫu nhiên không trùng từ 0 đến 255
3> Liên quan đến bài toán tạo số ngẫu nhiên không trùng đã có đầy trên GPE
4> Sau khi bạn có hàm tạo dãy số không trùng, chỉ cần áp dụng nó tạo dãy số n phần tử có giá trị từ 0 đến 255 (với n nguyên dương tùy ý và <256). Giải mã các con số thập phân tìm được ra nhị phân rồi đối 0 thành "A", 1 thành "B"
====> Vậy là xong!
Vâng cảm ơn bác, nhờ bác chỉ rõ hơn được không, e có điều chỉnh lại yêu cầu 1 chút ạ
 
Lần chỉnh sửa cuối:
Trên GPE em chỉ tìm thấy chủ yếu là tạo dãy số thập phân, còn dãy nhị phân xếp thành 8 cột thì em tìm mãi không thấy ạ, bác biết thì chỉ dùm với ạ, thank!
Bài #2 hướng dẫn chi tiết rồi đó thôi.
Mã:
A1=RANDBETWEEN(0,255)
B1=TEXT(DEC2BIN(A1),"0 0 0 0 0 0 0 0")
Kéo fill A1:B1 xuống dòng 256

- Tách thành 8 cột:
Copy B1:B256, paste value sang cột C
Text to Columns cho cột C ra 8 cột kế bên.
 
Bài #2 hướng dẫn chi tiết rồi đó thôi.
Mã:
A1=RANDBETWEEN(0,255)
B1=TEXT(DEC2BIN(A1),"0 0 0 0 0 0 0 0")
Kéo fill A1:B1 xuống dòng 256

- Tách thành 8 cột:
Copy B1:B256, paste value sang cột C
Text to Columns cho cột C ra 8 cột kế bên.

Ngừoi ta giỏi tiếng Tây hơn tiếng Việt, mà bài #2 thì viết bằng tiếng Việt cho nên không theo dõi nổi.
Mà bài này là 0, 1, 2, 3 đến 255 chứ đâu phải ngẫu nhiên. Bạn cần đổi trị A1 trong công thức ở B1 thành 0-255
 
Bài #2 hướng dẫn chi tiết rồi đó thôi.
Mã:
A1=RANDBETWEEN(0,255)
B1=TEXT(DEC2BIN(A1),"0 0 0 0 0 0 0 0")
Kéo fill A1:B1 xuống dòng 256

- Tách thành 8 cột:
Copy B1:B256, paste value sang cột C
Text to Columns cho cột C ra 8 cột kế bên.
Người ta muốn lấy ra N (1 <= N <= 256) hàng không trùng nhau. Bạn tạo ra được 256 hàng nhưng không đảm bảo là không trùng. Tức 256 hàng nhưng không đảm bảo đã liệt kê hết các khả năng. Chưa xét chuyện còn thiếu khả năng, từ 256 hàng đó làm cách nào để lấy ra N hàng không trùng? Vd. cần 20 hàng không trùng (Chứ luôn luôn muốn lấy đúng 256 dòng không trùng thì liệt kê hết ra chứ còn cần gì tới random nữa).

Mà đã công thức thì sao lại trộn với Text to Columns? Làm luôn công thức nữa chứ?
 
Người ta muốn lấy ra N (1 <= N <= 256) hàng không trùng nhau. Bạn tạo ra được 256 hàng nhưng không đảm bảo là không trùng.
Vâng anh.
Bài làm của em mới được ý "sắp xếp ngẫu nhiên", còn ý "không trùng" thì chưa đạt.
Mà đã công thức thì sao lại trộn với Text to Columns? Làm luôn công thức nữa chứ?
Lúc đầu em để định dạng số kiểu "0 0 0 0 0 0 0 0" và không định làm tách thành 8 cột. Sau lại làm ý đó nên quen áp dụng Text to Columns. :)

Chúc anh ngày vui!
 
Thử công thức này tại A2:

Mã:
=SUBSTITUTE(SUBSTITUTE(DEC2BIN(SMALL(IF(COUNTIF($A$1:A1,SUBSTITUTE(SUBSTITUTE(DEC2BIN(ROW(INDIRECT("1:256"))-1,8),0,"A"),1,"B"))=0,
ROW(INDIRECT("1:256"))-1),RANDBETWEEN(1,ROWS(A1:$A$256))),8),0,"A"),1,"B")

Kết thúc bằng Ctrl+Shift+Enter.
 
Cảm ơn bạn nhé. mình dùng hàm INDEX(A1:A256,INT(RAND()*256)+1) thì lấy ngẫu nhiên 1 hàng, nhưng những lần lấy ngẫu nhiên sau đó thì thỉnh thoảng bị trùng hàng đã lấy trước đó, không bỏ giá trị đã lấy được ra khỏi tâp hợp rồi tiếp tục lấy ngẫu nhiên hàng khác sao không trùng với hàng đã lấy trước đó (ý là có 256 lần lấy ngẫu nhiên hàng thì ra kết quả 256 hàng khác nhau chứ không bị trùng)
 
Lần chỉnh sửa cuối:
Cảm ơn bạn nhé. mình dùng hàm INDEX(A1:A256,INT(RAND()*256)+1) thì lấy ngẫu nhiên 1 hàng, nhưng những lần lấy ngẫu nhiên sau đó thì thỉnh thoảng bị trùng hàng đã lấy trước đó, không bỏ giá trị đã lấy được ra khỏi tâp hợp rồi tiếp tục lấy ngẫu nhiên hàng khác sao không trùng với hàng đã lấy trước đó (ý là có 256 lần lấy ngẫu nhiên hàng thì ra kết quả 256 hàng khác nhau chứ không bị trùng)
Muốn vậy càng dễ, vì đàng nào cũng chỉ có 256 trường hợp xảy ra mà bạn thì lại lấy toàn bộ các trường hợp đó. Vậy tôi có cách này:
- Tại cột A, gõ số thứ tự từ 1 đến 256 vào A1:A256
- Tại B1, gõ công thức =RANDBETWEEN(1,256) rồi kéo fill xuống đến B256
- Quét chọn A1:B256, sort vùng dữ liệu đã chọn theo chiều tăng (hoặc giảm tùy ý) theo cột B
Vậy là xong, bạn đã có 256 dòng ngẫu nhiên và chắc chắn không trùng tại cột A
 
Muốn vậy càng dễ, vì đàng nào cũng chỉ có 256 trường hợp xảy ra mà bạn thì lại lấy toàn bộ các trường hợp đó. Vậy tôi có cách này:
- Tại cột A, gõ số thứ tự từ 1 đến 256 vào A1:A256
- Tại B1, gõ công thức =RANDBETWEEN(1,256) rồi kéo fill xuống đến B256
- Quét chọn A1:B256, sort vùng dữ liệu đã chọn theo chiều tăng (hoặc giảm tùy ý) theo cột B
Vậy là xong, bạn đã có 256 dòng ngẫu nhiên và chắc chắn không trùng tại cột A
Bác cho em hỏi xem công thức:Tại A1 =SUBSTITUTE(SUBSTITUTE(DEC2BIN(UniqueRandomNum(0,2047,2048),11),"0","A"),"1",IF(D1=1,"B","B"))
áp dụng cho 11 ký tự 2048 hàng thì kết quả lại #NUM! nhỉ?
Mong Bác chỉ dùm ạ
 
Thử công thức này tại A2:

Mã:
=SUBSTITUTE(SUBSTITUTE(DEC2BIN(SMALL(IF(COUNTIF($A$1:A1,SUBSTITUTE(SUBSTITUTE(DEC2BIN(ROW(INDIRECT("1:256"))-1,8),0,"A"),1,"B"))=0,
ROW(INDIRECT("1:256"))-1),RANDBETWEEN(1,ROWS(A1:$A$256))),8),0,"A"),1,"B")

Kết thúc bằng Ctrl+Shift+Enter.
Thử áp dụng Công thức này cho 11 ký tự với 2048 hàng không trùng nhau thì kết quả lại #NUM!
 
Lần chỉnh sửa cuối:
Thử áp dụng Công thức này cho 11 ký tự với 2048 hàng không trùng nhau thì kết quả lại #NUM!
Nếu giá trị ở vd. A1 và A1 < 65536 thì
Mã:
=DEC2BIN(A1/256,8)&DEC2BIN(MOD(A1,256),8)

Trong trường hợp của bạn:
1. A1 = 0, A2 = 1, ..., A2048 = 2047
2. Công thức cho B1
Mã:
=SUBSTITUTE(SUBSTITUTE(DEC2BIN(A1/256,3)&DEC2BIN(MOD(A1,256),8),"0","A"),"1","B")
sao chép xuống dưới.
 

Bài viết mới nhất

Back
Top Bottom