in theo thứ tự ngẫu nhiên của mảng

112 views
Skip to first unread message

Phượng Mai

unread,
Mar 23, 2012, 2:39:03 PM3/23/12
to int2202ap
mình hiện đang ko có ý tưởng cho bài in theo thứ tự ngẫu nhiên của
mảng, vậy bạn nào có thuật toán giúp mình nhé!!
Tks!!!

__Lê Thường Quân__

unread,
Mar 23, 2012, 9:12:48 PM3/23/12
to int2...@googlegroups.com
Bạn có thể dùng ý tưởng giống bài card_games, random số x trong khoảng n->n, nếu a[x] chưa được in thì in ra, nếu đã được in ra thì x++, nếu đến cuối mà chưa được in thì x=0 =))

huyen...@vnu.edu.vn

unread,
Mar 23, 2012, 9:27:57 PM3/23/12
to int2...@googlegroups.com
tớ thì áp dụng thuật chia bài trong lab05 của cô. Tức là tạo thêm một mảng một chiều,dùng hàm rand
để sinh số ngẫu nhiên...
ví dụ mảng ban đầu là a[n],tạo mảng mới là b[n] vớ các phần tử khởi tạo ban đầu đều là false.
hàm rand sinh số ngẫu nhiên tìm ra x => nếu b[x]==false thì in ra a[x] và gán b[x]=true,nếu không
thì quay lại,sinh số x và so sánh tiếp,cho đến khi tất cả mảng b[n] đều là true.

Phượng Mai

unread,
Mar 23, 2012, 11:43:46 PM3/23/12
to int2202ap
có cách gì mà khi sinh số ngẫu nhiên thì các giá trị ấy ko bị trùng
nhau ko, có cách nào ko cần dùng mảng ko
ví dụ như sinh một số có giá trị từ 0->20 mà ko có giá trị nào bị
trùng nhau ấy???

Việt Anh Nguyễn

unread,
Mar 24, 2012, 12:21:11 AM3/24/12
to int2...@googlegroups.com
Có. Bạn thử theo cách này nhé:
Số nào đc in ra rồi thì bạn dồn nó xuống cuối mảng.
Ở những sinh số ngẫu nhiên tiếp theo bạn % cho số fần tử giảm đi 1 và in ra thôi.
code kiểu như thế này:

void inNgauNhien (int a[], int n){
n = n-1;
int đếm=0 //đếm phần tử đã in ra
while(đếm <= n){
    int i = rand()%(n+1);
    cout<<a[i];
    đếm ++;
    swap (a[i], a[n])  //Hàm đổi chỗ 2 fần tử.
    n--;     //Cập nhật lại vị trí cuối.
}
}

Mình mới nghĩ ra chứ chưa thử :D

Thanh Nguyen

unread,
Mar 24, 2012, 2:22:04 AM3/24/12
to int2202ap
Hehe cách của Việt Anh hay đấy!
Cách random như trong bài card của cô Điệp cũng là một phương án :D

Phượng Mai

unread,
Mar 24, 2012, 2:28:15 AM3/24/12
to int2202ap
cái này thì i vẫn có thể bị trùng mà!!!
Message has been deleted
Message has been deleted

Việt Anh Nguyễn

unread,
Mar 24, 2012, 4:31:12 AM3/24/12
to int2...@googlegroups.com
Thank bạn Thanh Nguyen :D
@Phượng Mai:
Ở các lần lấy số ngẫu nhiên, n đều đã giảm đi 1 rồi mà. Mà sinh số ngẫu nhiên bằng cách rand()%(n+1)

   n--;     //Cập nhật lại vị trí cuối.
Các số đã in cũng đã bị đẩy xuống cuối mảng rồi thì làm sao trùng được nhỉ :-?

thun...@vnu.edu.vn

unread,
Mar 24, 2012, 7:47:07 AM3/24/12
to int2...@googlegroups.com
> mình hiện đang ko có ý tưởng cho bài in theo thứ tự ngẫu nhiên của
> mảng, vậy bạn nào có thuật toán giúp mình nhé!!
> Tks!!!
-========================
mình nghĩ nên dùng hàm rand() để sinh ra ngẫu nhiên 1 số là chỉ số của 1 phần tử trong mảng,
nếu số đó chưa dc in thì in ra
còn nếu dc in rồi thì bạn tăng cái số đó lên 1 và xem nó đã dc in chưa, nếu chưa thì in ra
nếu in rồi thì lại tăng tiếp...
nếu chỉ số đó bằng chỉ số cuối cùng và số cioois cùng cũng đã dược in thì bạn cho nó quay về đầu.

Phượng Mai

unread,
Mar 24, 2012, 8:06:04 AM3/24/12
to int2202ap
ah, mình quên mất, so sorry :))))

On 24 Tháng Ba, 15:31, Việt Anh Nguyễn <anhnv...@gmail.com> wrote:
> Thank bạn Thanh Nguyen :D
> @Phượng Mai:

> Ở các lần lấy số ngẫu nhiên,* n đều đã giảm đi 1* rồi mà. Mà sinh số ngẫu


> nhiên bằng cách rand()%(n+1)
>    n--;     //Cập nhật lại vị trí cuối.

> Các *số đã in cũng đã bị đẩy xuống cuối mảng* rồi thì làm sao trùng được
> nhỉ :-?

Reply all
Reply to author
Forward
0 new messages