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

Đề tài: [ Solved ] Sắp xếp ngẫu nhiên các số.

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

    Mặc định [ Solved ] Sắp xếp ngẫu nhiên các số.

    Làm thế nào để có thể sắp xếp ngẫu nhiên 1 hoán vị. Ví dụ : mình muốn đặt 1 cách ngẫu nhiêu các số tự nhiên từ 1 đến 100 vào 1 bàn cờ 10x10 thì phải làm thế nào ? ( Các số không trùng nhau và tất cả các số 1->100 đều phải có mặt )

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    470

    Trích dẫn Nguyên bản được gửi bởi aMember Xem bài viết
    Làm thế nào để có thể sắp xếp ngẫu nhiên 1 hoán vị. Ví dụ : mình muốn đặt 1 cách ngẫu nhiêu các số tự nhiên từ 1 đến 100 vào 1 bàn cờ 10x10 thì phải làm thế nào ? ( Các số không trùng nhau và tất cả các số 1->100 đều phải có mặt )
    Bạn có thể tham khảo phương pháp a) trong bài này:
    http://forums.congdongcviet.com/show...6542#post46542

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

    Thank you, mình vừa mới nghĩ ra, thử post lên mọi người coi hộ nhé.
    Code:
    #include <iostream.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void write(short *a,int n)
    // thu tuc in mang ra man hinh
     {
       cout<<"\n" ;
       for ( int i=0;i<n;i++)
         {
           if (a[i] < 10) cout<<" "<<a[i]<<"   ";
           else cout<<a[i]<<"   " ;
         }
     }
    int main()
     {
       short anArray[100] ;  //mang ho tro ;
       short a[100] ;            //mang luu lai cac so sau khi sx ngau nhien
       for (int i =0;i<100;i++)
         anArray[i] = i+1 ;
       randomize() ;
       int n = 99 ;
       while(n>=0)
         {
           int k = random(n) ;
           a[n] = anArray[k] ;    
           anArray[k] = anArray[n] ; // moi so neu duoc chon  se
                                 //bi loai ra trong cac lan chon sau;
           n--;
         }
       write(a,99) ;
       getch();
       return 0 ;
     }

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    uhm,cậu sử dụng phương pháp xóa khá hay đấy,nhưng mình nghĩ chẳng cần phải khởi tạo ngẫu nhiên làm gì

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

    Cái này đọc kĩ lại thấy nó như pp a của Ada, vậy chỉ cần dùng 1 mảng giống của Ada sẽ tốt hơn.
    PS: Mình dùng cái này để khởi tạo trong trò ghép ảnh, mình muốn xếp lẫn lộn 100 miếng ghép với nhau khi bắt đầu trò chơi.

  6. #6
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Mặc định [ Solved ] Sắp xếp ngẫu nhiên các số.

    Cái này đọc kĩ lại thấy nó như pp a của Ada, vậy chỉ cần dùng 1 mảng giống của Ada sẽ tốt hơn.
    PS: Mình dùng cái này để khởi tạo trong trò ghép ảnh, mình muốn xếp lẫn lộn 100 miếng ghép với nhau khi bắt đầu trò chơi.
    quên,mình nói không kỹ
    không cần cái nay nè randomize()
    thuật toán của cậu có tồn tại hàm nào mà song ánh
    mình nghĩ của cậu là rand địa chỉ của mảng rồi xóa luôn địa chỉ đó đấy chứ hơi giống cách mình

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

    Trích dẫn Nguyên bản được gửi bởi coder_gate Xem bài viết
    quên,mình nói không kỹ
    không cần cái nay nè randomize()
    thuật toán của cậu có tồn tại hàm nào mà song ánh
    mình nghĩ của cậu là rand địa chỉ của mảng rồi xóa luôn địa chỉ đó đấy chứ hơi giống cách mình
    Là phương pháp a cơ mà, thực ra cách của bạn cũng thế thôi, mình sửa lại 1 chút thế này là sẽ thành thuật toán của Ada ngay thôi mà
    Code:
        n = 99;   
        while(n>=0)
         {
           int k = random(n) ;
           int temp = anArray[k] ;
           anArray[k] = anArray[n] ; 
           anArray[n] = temp ;
    
           n--;
         }
    Như vậy mảng anArray được sắp xếp ngẫu nhiên , và cũng không cần mảng a nữa.

  8. #8
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    470

    Bạn aMember làm đúng rồi đấy. Phương pháp a) kia có tên một trong các tác giả sau:

    - Fisher-Yates, những người đầu tiên đề xuất phương pháp thực hiện bằng giấy bút với độ phức tạp O(N^2).

    - Durstenfeld, người đầu tiên nghĩ ra thuật toán cho máy tính, với độ phức tạp O(N). Code của Durstenfeld giống như code của bạn aMember. Xem thêm http://en.wikipedia.org/wiki/Knuth_shuffle .

    - Knuth, người đầu tiên phổ biến thuật toán này.

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

  1. Lập trình C Hàm tạo số ngẫu nhiên | Cách nhập giá trị ngẫu nhiên cho ma trận?
    Gửi bởi chuong01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 13-08-2012, 09:43 PM
  2. 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
  3. [ Solved ]Tạo số ngẫu nhiên không trùng nhau
    Gửi bởi jacking_nguyen1 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 31
    Bài viết cuối: 23-09-2008, 06:41 PM
  4. [ Solved ]Khởi tao mảng ngẩu nhiên
    Gửi bởi kieutrongduc 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: 21-09-2008, 02:33 PM
  5. [Solved]Cách tạo ID sinh ngẫu nhiên trong table???
    Gửi bởi hacker_it007 trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 8
    Bài viết cuối: 23-07-2007, 01:08 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