Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 18 kết quả

Đề tài: In ra các số ngẫu nhiên bằng hàm Random?????????

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    7

    Angry In ra các số ngẫu nhiên bằng hàm Random?????????

    Mình mới học C# nên cần hỏi:
    Các bạn có thể chỉ mình dùng hàm random thế nào để cho in ra ngẫu nhiên các số trong 1 khoảng, nhưng các số không được trùng nhau.
    Ví dụ như cho in ra 4 số được sắp xếp ngẫu nhiên từ 0 đến 3 (VD: 1 2 0 3 ).

    Mình đã làm nhưng các số lại trùng nhau.
    Nó hiện từ 0 đến 3, nhưng các số bị lặp lại. Hiếm lắm mới xuất hiện đủ 0, 1, 2, 3.
    Đây là đoạn code của mình:
    Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
    
                int[] b = new int[4];
                Random ran = new Random();
                for (int i = 0; i < 4; i++)
                {
                    b[i] = ran.Next(4);
                    Console.Write("{0} ",b[i]);
                }
                Console.ReadLine();
            }
        }
    }
    Các bạn giúp mình nha.
    Cảm ơn nhiều!

  2. #2
    Ngày gia nhập
    10 2007
    Bài viết
    37

    Bạn dùng mảng (hay tương tự) để lưu số đc in ra.
    Lặp:
    + Kiểm tra số in ra có hay chưa.
    -- Có: Lặp lại.
    -- Chưa: in ra, thêm vào mảng.

  3. #3
    Ngày gia nhập
    01 2008
    Bài viết
    31

    đem Random ran làm biến toàn cục thì được chứ gì.

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi ntcuong Xem bài viết
    Bạn dùng mảng (hay tương tự) để lưu số đc in ra.
    Lặp:
    + Kiểm tra số in ra có hay chưa.
    -- Có: Lặp lại.
    -- Chưa: in ra, thêm vào mảng.
    Nếu làm như bạn thì mình nghĩ khi in ra khoảng 1 triệu số ngẫu nhiên từ 0 đến 999999999 thì nó sẽ lặp đến bao giờ?
    Bạn có cách nào hay hơn không?

    Trích dẫn Nguyên bản được gửi bởi jetli88 Xem bài viết
    đem Random ran làm biến toàn cục thì được chứ gì.
    Ý bạn là sao, mình còn dở lắm nên không hiểu.
    Đã được chỉnh sửa lần cuối bởi ak9442 : 16-04-2008 lúc 04:53 PM. Lý do: sai chính tả, dùng từ không đúng

  5. #5
    Ngày gia nhập
    02 2008
    Bài viết
    66

    Bạn mà cứ tạo ngẫu nhiên rồi kiểm tra thì chậm lắm mình cũng làm chương trinh tạo pass có vấn đề nếu mà cho nó tạo rồi kiểm tra điều kiện thì siêu chậm luôn.
    Bạn nên tạo dãy ảo hóa nó đi.
    Ví dụ: giới hạn 0..100
    bạn chọn được số 5 thì tạo ra số ngẫu nhiên tiếp theo là 0..99 được số 5 thì bạn đếm đến do có số 5 rồi (số được chọn lớn hơn 5 cũng tăng 1 đơn vị dùng đệ quy nhé) tăng 1 thành 6 nếu nhiều số nữa thì cứ tăng cho đến khi không gặp số trùng nữa.
    Chúc bạn may mắn.

  6. #6
    Ngày gia nhập
    03 2007
    Bài viết
    179

    Mặc định In ra các số ngẫu nhiên bằng hàm Random?????????

    dùng hàm random có hạt giống xem, hạt giống là timenow

  7. #7
    Ngày gia nhập
    02 2008
    Bài viết
    88

    Các bạn làm gì mà phức tạp thế.
    @ntcuong : đối với cách của bạn thì siêu chậm, vì sao vì hàm random tỷ lệ trùng rất cao. ví dụ 1, 2.........2 (có khi kết quả sau đó cả 10 số 2 cũng ko chừng). Và khi cần tìm dãy ngẫu nhiên càng lớn càng chậm.
    @thienthan : cần gì tới đệ quy.
    Trong C# đã có sẵn 1 lớp giúp ta làm việc này rất dễ dàng là ArrayList.
    Ví dụ để tạo ra dãy 10 con số ngẫu nhiên trong khoảng 1-10.
    Bạn chỉ cần add cac giá trị từ 1-10 vào trong ArrayList.
    Sau đó lặp 10 lần.
    Ở lần lặp thứ nhất các bạn lấy 1 giá trị ngẫu nhiên trong ArrayList này, theo index từ 0-9. Rồi xóa phần tử vừa lấy dựa theo index, để lần sau ta sẽ ko bao giờ lấy nhầm giá trị này.
    Lần thứ 2 lấy giá trị theo index trong 0-8 , rồi xóa phần tử vừa lấy.
    và cữ lần lượt như vậy.
    Bảo đảm tốc độ nhanh hơn rất nhiều.
    Đã được chỉnh sửa lần cuối bởi anhtuyenbk : 16-04-2008 lúc 06:17 PM.
    Mình từ Caulacbovb qua)
    Giã từ VB6 đến với VB.Net, C# và Java.

  8. #8
    Ngày gia nhập
    02 2008
    Bài viết
    66

    anhtuyenbk
    @thienthan : cần gì tới đệ quy.
    Trong C# đã có sẵn 1 lớp giúp ta làm việc này rất dễ dàng là ArrayList.
    Ví dụ để tạo ra dãy 10 con số ngẫu nhiên trong khoảng 1-10.
    Bạn chỉ cần add cac giá trị từ 1-10 vào trong ArrayList.
    Sau đó lặp 10 lần.
    Ở lần lặp thứ nhất các bạn lấy 1 giá trị ngẫu nhiên trong ArrayList này, theo index từ 0-9. Rồi xóa phần tử vừa lấy dựa theo index, để lần sau ta sẽ ko bao giờ lấy nhầm giá trị này.
    Lần thứ 2 lấy giá trị theo index trong 0-8 , rồi xóa phần tử vừa lấy.
    và cữ lần lượt như vậy.
    Nếu phân tích kĩ thì hình như cách của cậu tốn bộ nhớ hơn và phải ghi lại bộ nhớ nhiều lần hơn. Có một bài mình làm cũng dùng cách giống như cậu sau khi sửa lỗi mình mới tính ra cách kia nhanh hơn. Nhưng khi kiểm tra cả hai cách đều báo 0 ms.
    Bó tay luôn.
    Có vẻ với số nhỏ (cỡ vài trăm nghìn) thì hai cách này cũng giống nhau thôi.
    Bạn nên viết cách anhtuyenbk cho gọn.



    Mình đọc kĩ thấy có phải số của bạn phải có đủ các số từ 0 đến n không thì còn cách khác hiệu quả hơn.

  9. #9
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    mình thấy cách của anhtuyenbk hay đó.

  10. #10
    Ngày gia nhập
    03 2008
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi thienthan Xem bài viết
    Bạn mà cứ tạo ngẫu nhiên rồi kiểm tra thì chậm lắm mình cũng làm chương trinh tạo pass có vấn đề nếu mà cho nó tạo rồi kiểm tra điều kiện thì siêu chậm luôn.
    Bạn nên tạo dãy ảo hóa nó đi.
    Ví dụ: giới hạn 0..100
    bạn chọn được số 5 thì tạo ra số ngẫu nhiên tiếp theo là 0..99 được số 5 thì bạn đếm đến do có số 5 rồi (số được chọn lớn hơn 5 cũng tăng 1 đơn vị dùng đệ quy nhé) tăng 1 thành 6 nếu nhiều số nữa thì cứ tăng cho đến khi không gặp số trùng nữa.
    Chúc bạn may mắn.
    Mình quả thật không hiểu cách của bạn. Mình dở lắm nên hơi khó hiểu.
    bạn giúp mình nha!


    Trích dẫn Nguyên bản được gửi bởi anhtuyenbk Xem bài viết
    Trong C# đã có sẵn 1 lớp giúp ta làm việc này rất dễ dàng là ArrayList.
    Ví dụ để tạo ra dãy 10 con số ngẫu nhiên trong khoảng 1-10.
    Bạn chỉ cần add cac giá trị từ 1-10 vào trong ArrayList.
    Sau đó lặp 10 lần.
    Ở lần lặp thứ nhất các bạn lấy 1 giá trị ngẫu nhiên trong ArrayList này, theo index từ 0-9. Rồi xóa phần tử vừa lấy dựa theo index, để lần sau ta sẽ ko bao giờ lấy nhầm giá trị này.
    Lần thứ 2 lấy giá trị theo index trong 0-8 , rồi xóa phần tử vừa lấy.
    và cữ lần lượt như vậy.
    Bảo đảm tốc độ nhanh hơn rất nhiều.
    Bạn ơi, mình lập trình trong winform không thấy Arraylist mà chỉ thấy Array thôi.

Các đề tài tương tự

  1. Random 5 phần tử ngẫu nhiên từ mảng ( or list ?)
    Gửi bởi rongdo12 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 25-09-2012, 05:39 PM
  2. Lập trình C++ Cách sử dụng hàm random để tạo số ngẫu nhiên không trùng nhau?
    Gửi bởi reach_phan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 10-11-2011, 09:53 PM
  3. Random chọn ngẫu nhiên 1 phần tử, giúp đỡ
    Gửi bởi zalrol trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 01-04-2011, 12:25 PM
  4. Sử dụng Random hiệu quả để tạo số ngẫu nhiên
    Gửi bởi kennek trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 14-07-2010, 06:48 PM
  5. Hàm Random, làm thế nào để lấy các số âm ngẫu nhiên?
    Gửi bởi Chuột trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 12-04-2009, 11:15 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn