30/09/2018, 18:57

Ai gợi ý cho em cách giải quyết bài này?

Đề yêu cầu là nhập vào danh sách tên n người, xuất ra tất cả các cách sắp xếp n người đó vào 1 bàn.

Em tính dùng hàm random để random ra tên 1 người cho 1 ghế(ở đây em vd bàn 4 ghế và số người là 5) nhưng mà không biết làm sao để nó không random lặp lại

*grab popcorn* viết 21:02 ngày 30/09/2018

Dùng lệnh này để randomize

srand(time(NULL));

nhớ include stdlib.h và time.h

17XGOD viết 21:14 ngày 30/09/2018

srand(time(NULL)); để không bị lặp lại hả anh??

*grab popcorn* viết 21:01 ngày 30/09/2018

Có lặp mà tỉ lệ ít.

17XGOD viết 21:10 ngày 30/09/2018

okay để em thử làm

X viết 21:05 ngày 30/09/2018

Xem qua bài hoán vị nhé
https://github.com/minhhuy150894/C-CPPSourceCode/blob/master/Some-Problems/hoan-Vi.cpp

17XGOD viết 21:02 ngày 30/09/2018

giúp em với nó em nhập tên 3 người nhập số ghế là 2 thì nó toàn random ra 2 tên giống nhau -_-

void sapxep(nguoi a[],int n,int k){
	int j;
	for (int i=1;i<=k;i++){
		srand(time(NULL));
		j=rand()%n;
		printf("%s	 ",a[j]);	
	}
		
}

em chạy debug từ từ thì nó ra 2 tên khác nhau nhưng mà chạy bth thì ra giống nhau

Lê Anh viết 20:59 ngày 30/09/2018

Hoán vị sao lại dùng random? Ở đây có một ví dụ về hoán vị, bằng java nhưng mình nghĩ dễ hiểu thôi :))
Permutations.java

17XGOD viết 21:02 ngày 30/09/2018

ở đây em mới thử random tên thôi chứ chưa động gì hoán vị anh à

... viết 21:05 ngày 30/09/2018

Đặt srand(time(NULL)) lên trước vòng for

*grab popcorn* viết 21:00 ngày 30/09/2018

%n thì nó thu hẹp phạm vi lại rồi.
Như n = 2 thì chỉ có 1 và 0 -> 50% trùng
n = 3 thì kq chỉ là 1 2 0 -> 1/3 khả năng trùng…
n càng lớn tỷ lệ trùng càng nhỏ

17XGOD viết 21:03 ngày 30/09/2018

ồ vậy chắc không dùng được rồi chắc em phải làm bài này theo thuật toán sinh quá

17XGOD viết 21:04 ngày 30/09/2018

cảm ơn anh em giải theo cách khác không dùng rand nữa

17XGOD viết 21:13 ngày 30/09/2018

Nếu anh biết cách làm thì chỉ cho em với được không bí lắm rồi

Phương Trọng Lê viết 21:03 ngày 30/09/2018

Dạng bài liệt kê tổ hợp hoặc hoán vị này thường có 2 cách đơn giản nhất để làm đó là dùng phương pháp sinh hoặc đệ quy lui, cả 2 pp này bạn có thể tham khảo trong cuốn giải thuật và lập trình của Lê Minh Hoàng

17XGOD viết 21:12 ngày 30/09/2018

bài này em đọc từ cuốn thầy LMH đây

Phương Trọng Lê viết 21:05 ngày 30/09/2018

vậy thì bạn dùng đệ quy lui mà làm, chứ sao lại dùng rand cho nó phức tạp, hàm rand rất khó kiểm soát

17XGOD viết 21:06 ngày 30/09/2018

Yup hqua giờ ngồi thử dùng thuật đẻ mà rắc rối quá nên đọc xuống thấy quay lui dễ hiểu hơn

Bài liên quan
0