Random luôn cho ra số khác nhau

Em muốn random 1 mảng để đưa ra kết quả mỗi lần random đều là số khác những số trước trong mảng .
Ac cho e ý tưởng với ạ. E cảm ơn ạ.

Random ra 1 số, lấy số đó check xem đã tồn tại trong mảng chưa, nếu chưa tồn tại thì lấy, tồn tại rồi thì random ra số khác.

4 Likes

cách của mình thì mỗi lần thêm vào mảng không phải check lại mảng nữa (vì có trường hợp mảng lớn). Bạn có thể tạo ban đầu một số, các số sau sẽ bằng số trước đó cộng với 1 số random, thì sẽ không phải check lại mảng. Kiểu như:

n0 = 3;
n1 = n0 + random(1, 10);
n2 = n1 + random(1, 10);
...
4 Likes

shuffle cái mảng n phần tử rồi lấy ra k phần tử đầu tiên là được.

còn nếu n quá lớn ko tạo mảng n phần tử được thì xài https://en.wikipedia.org/wiki/Reservoir_sampling

7 Likes

Hàm này sẽ in liên tục các số không giống nhau

public static void random() {
	Set<Integer> set = new HashSet<>();
	while (true) {
		int n = ThreadLocalRandom.current().nextInt();
		if (!set.add(n)) {
			System.out.println(n);
		}
	}
}
3 Likes

E cảm ơn ac đã cho e lời khuyên ạ. E sẽ code thử ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?