Announcement

Collapse
No announcement yet.

[C++] help me!!!!!!

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++] help me!!!!!!

    Cả nhà cho mình hỏi là mình muốn nhập vào một mảng n phần tử, tính thử từ n phần tử trong mảng vừa nhập, có bao nhiêu cách hoán vị và xuất ra hết tất cả các cách hoán vị đó..ví dụ nhập vào 3 số 1, 2, 3 thì sẽ có 6 cách hoán vị, và giờ làm sao cho chương trình sẽ xuất ra hết 6 cách hoán vị đó là:
    1, 2, 3
    1, 3, 2
    2, 1, 3
    2, 3, 1
    3, 1, 2
    3, 2, 1
    Ai biết chỉ giáo cho mình với. Tks cả nhà nhiều.
    Last edited by 11520506; 27-11-2012, 22:37.

  • #2
    Em nghĩ là n! cách hoán vị :-?
    Khi ta chào đời, ta khóc mọi người cười
    Sống sao để khi chết đi ta cười còn mọi người khóc.


    Cuộc đời chỉ đáng sống khi còn bạn bè, người thân và quan trọng nhất là ta còn có thể đem lại niềm vui cho người khác

    Comment


    • #3
      Có n! cách hoán vị nếu dãy có n số phân biệt :nose:, còn nếu có lặp thì chắc sẽ tính được = cách blah blah nào đó :surrender:
      Giả sử ban đầu có dãy 1,2,3,...,n
      Ta tìm vị trí cặp i và j đầu tiên tính từ bên phải sang sao cho :
      1. i < j
      2. a[j] > a[i]
      Đổi chỗ 2 giá trị ở 2 vị trí này, sao đó đoạn từ i+1 đến n xếp lại theo thứ tự tăng dần ---> Được 1 hoán vị mới.
      Cứ tiếp tục làm như vậy cho đến khi a[1]>=a[2]>=a[3]>=..>=a[n]
      Last edited by 12520527; 28-11-2012, 00:47.
      “ Đơm hoa không kết trái thì có sao?

      Là cá thì nhất định phải bơi ư?

      Ai bảo cuộc đời là phải sống,
      Ai bảo đau khổ rồi cũng sẽ qua,
      Ai bảo bài hát là phải có dạo đầu,

      Phá vỡ ranh giới để tìm kiếm điều gì đó...”

      Comment


      • #4
        Hoặc có thể dùng luôn cái thư viện algorithm luôn )
        Tham khảo: http://www.cplusplus.com/reference/a...t_permutation/
        http://www.cplusplus.com/reference/a...v_permutation/
        Thuật toán của hàm xây dựng sẵn đó là sắp xếp các chuỗi theo trình tự giống như trong từ điển. Đầu tiên nó sẽ đi từ cuối dãy lên đầu để tìm 2 phần tử kế cận nhau mà phần tử bên trái bé hơn bên phải (gọi là a[i]<a[ii]) (1). Khi đã xác định đc a[i] và a[ii] thì sẽ quay lại từ cuối dãy để tìm 1 phần tử khác có giá trị a[j]>=a[i]. Ta đổi giá trí a[j] với a[i]. Sau đó lật ngược chuỗi từ ii đến cuối.
        In ra kết quả thu đc. Gọi hàm đó 1 lần nữa để tìm chuỗi hoán vị tiếp theo. Hàm sẽ được gọi đến khi vòng lặp (1) ko tìm được kết quả nào nữa thì ta đã có được tất cả các chuỗi hoán vị.
        Last edited by 12520238; 28-11-2012, 01:38.
        Khi ta chào đời, ta khóc mọi người cười
        Sống sao để khi chết đi ta cười còn mọi người khóc.


        Cuộc đời chỉ đáng sống khi còn bạn bè, người thân và quan trọng nhất là ta còn có thể đem lại niềm vui cho người khác

        Comment

        LHQC

        Collapse
        Working...
        X