Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Tạo mảng 2 chiều bằng cách phát sinh phần tử ngẩu nhiên và không trùng.

  1. #1
    Ngày gia nhập
    12 2012
    Bài viết
    2

    Post Tạo mảng 2 chiều bằng cách phát sinh phần tử ngẩu nhiên và không trùng.

    Như tiêu đề. Các pro vui lòng hướng dẫn em cách code bài tạo mảng 2 chiều bằng cách phát sinh phần tử ngẫu nhiêu (ý này làm được rồi) và không trùng. (Híc híc, ý này khó quá, suy nghĩ không ra)

  2. #2
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Trích dẫn Nguyên bản được gửi bởi trungnguyenkbuor Xem bài viết
    Như tiêu đề. Các pro vui lòng hướng dẫn em cách code bài tạo mảng 2 chiều bằng cách phát sinh phần tử ngẫu nhiêu (ý này làm được rồi) và không trùng. (Híc híc, ý này khó quá, suy nghĩ không ra)
    Giả sử cần tạo n phần tử. Ta làm như sau:
    - Sinh ra n phần tử ngẫu nhiên tăng dần hoặc giảm dần
    - Xáo trộn n phần tử trên, cách làm thì search "shuffle algorithm"
    - Đưa n phần tử đã xáo trộn kia vào mảng 2 chiều

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

    Đây là cách của mình, cách này không cần thuật toán xáo trộn: chuyển mảng 2 chiều thành mảng tạm 1 chiều và sử dụng tính chất số thứ tự phần tử trong mảng là tăng dần và duy nhất để chọn ra ngẫu nhiên lần lượt từng phần tử trong mảng tạm và gán số thứ tự của phần tử thành giá trị phần tử ở mảng chính.

  4. #4
    Ngày gia nhập
    12 2012
    Bài viết
    2

    Tks các pro nhiều lắm. Nhưng pro nào có thể post đoạn code minh họa được không?

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

    Mặc định Mình quên nguồn rùi.Nhưng mình thấy hàm này chạy đúng

    bool RandArrInt(int* a, int nCount, int iMin, int iMax)
    {
    int nDistance = iMax - iMin + 1;
    if (nDistance < nCount)
    return false;
    int* b = new int[nDistance];
    int i, rnd;
    for (i = iMin; i <= iMax; ++i)
    {
    b[i-iMin] = i;
    }
    for (i = 0; i < nCount; ++i)
    {
    rnd = ((double)rand() / (double)RAND_MAX) * nDistance;

    a[i]=b[rnd];
    b[rnd] = b[nDistance - 1];

    --nDistance;
    }
    delete b;
    return true;
    }
    Sau đó bạn chuyển về mảng 2 chiều .(Chắc nó không khó.) Nếu bạn cần code thì mình sẽ đưa
    Đã được chỉnh sửa lần cuối bởi songquan72 : 28-12-2012 lúc 10:38 AM. Lý do: Thay đổi

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

  1. Sinh số ngẫu nhiên trong phạm vi tùy ý
    Gửi bởi dinhha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 31-10-2013, 09:40 AM
  2. Phát sinh ngẫu nhiên mảng một chiều các số nguyên sao cho mảng có thự tự tăng dần
    Gửi bởi fire_dragon14988 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 09-03-2013, 03:44 AM
  3. Bài tập C Tạo ngẫu nhiên mảng 2 chiều vuông 4X4 với các phần tử tạo ngẫu nhiên trong đoạn[0,50]
    Gửi bởi truongtrungviet trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 16-04-2011, 08:06 AM
  4. phát sinh ngẫu nhiên mảng một chiều các số nguyên âm
    Gửi bởi giangpham 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: 24-11-2010, 10:12 PM
  5. Bài tập C Tạo mảng 1 chiều phát sinh ngẫu nhiên
    Gửi bởi hongban trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 31-10-2010, 04:56 PM

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