Hiện tại em đang làm một trò chơi có liên quan đến mảng 2 chiều, suy nghĩ nhiều rồi mà vẫn chưa ra đc thuật toán
" Cho mảng 2 chiều [AxB], làm thế nào để MÁY có thể chọn NGẪU NHIÊN một mảng CON [MxN] bất kỳ thuộc mảng MẸ [AxB] để ta truyền giá trị cho mảng CON đó"
Ví dụ: cho mảng MẸ [10x10], chọn ngẫu nhiên mảng CON có kích thước [3x2]/[2x3] thuộc mảng MẸ.
Cứ có chữ “ngẫu nhiên” thì xúc hàm rand() ra xài thôi. Tiếp theo là nghĩ cho nó rand() như thế nào.
Mình giả sử A và M là số dòng của matrix, B và N là số cột. Nếu muốn random một ô có M dòng (M < A) thì rand() từ 0 -> A - M nghĩa là chỉ số dòng đầu tiên của M dòng đó nằm trong khoảng từ 0 -> A - M (Nếu dòng đầu tiên có chỉ số > A - M thì dòng cuối cùng thứ M sẽ > A). Tương tự cho cột.
Ý mình là lấy random 2 số M và N, xong random lấy chỉ số đầu của M dòng và N cột. Chỉ số dòng đầu và cột đầu nằm trong khoảng A - M và B - N. Sao lại không liên tiếp?
bạn không hiểu ý của @nguyenchiemminhvu
ý a ấy là chọn ra chỉ số của hàng đầu tiên của ma trận con thuộc đoạn 0-> A-M-1 ví dụ là hàng i đi. thì ma trận con (MxN) sẽ từ hàng i đến i+M-1 => có M hàng. với Cột thì tương tự, chọn random j từ 0->B-N-1. rồi giới hạn cột của ma trận con từ j->j+N-1. -> 4 chỉ số ở 4 góc của ma trận con là mt[i,j] , mt[i,j+N-1], mt[i+M-1,j], mt[i+M-1,j+N-1]
bạn xem đủ 1 ma trận MxN chưa.
hi, mình hiểu ý của @nguyenchiemminhvu rồi, nhưng như thì chẳng khác nào gán cho máy 1 mảng con rồi, chọn ngẫu nhiên những ô trong mảng đó, cái mình cần ở đây là mảng con tạo ra cũng cần ngâu nhiên. VD: mình cần mảng con a[3x2] (như vậy sẽ có 6 ô) trong mảng [10x10], đầu tiên mình sẽ lấy ô thứ nhất là a[6; 4], thì ô tiếp theo sẽ khoanh vùng trong a[4->8; 3->5] đúng hok nào, như vậy khi liệt kê ra thì có rất nhiều mảng kiểu [3x2] trong vùng đó, sau đó chọn ô tiếp theo làm sao cho phù họp với những ô đã chọn trước nữa