Lập giai thừa trong excel, tìm tất cả các cách đảo 1 dãy số (1 người xem)

  • Thread starter Thread starter nhut810
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

nhut810

Thành viên mới
Tham gia
13/3/10
Bài viết
3
Được thích
0
NHƯ TIÊU ĐỀ MÌNH ĐÃ VIẾT, CÁI NÀY TỪ KHI OFFICE EXCEL RA Đời thì mình đã nghĩ tới rối, nhưng mãi tới hôm nay vẫn chưa tìm ra cách nào, nhưng mình nghĩ là được.
mong các cao thủ trên thế giới giúp đỡ.
Cụ thể như sau: Ta có ABCD là chuỗi 4 kí tự, thì sẽ có tất cả 4!=24 cách đảo, cụ thể :
1: ABCD
2: ABDC
3: ACBD
3: ACDB
5: ....
24: DCBA
Chuỗi ít ký tự thì chúng ta có thể ghi tay ra, nhưng nếu chuỗi đó >10, 10!= 3.628.800 cách sắp xếp thì sao?
Cách giải quyết là dùng lập trình để tự động tìm ra các cách đảo này.
Mong các cao thủ giúp đỡ.
 
NHƯ TIÊU ĐỀ MÌNH ĐÃ VIẾT, CÁI NÀY TỪ KHI OFFICE EXCEL RA Đời thì mình đã nghĩ tới rối, nhưng mãi tới hôm nay vẫn chưa tìm ra cách nào, nhưng mình nghĩ là được.
mong các cao thủ trên thế giới giúp đỡ.
Cụ thể như sau: Ta có ABCD là chuỗi 4 kí tự, thì sẽ có tất cả 4!=24 cách đảo, cụ thể :
1: ABCD
2: ABDC
3: ACBD
3: ACDB
5: ....
24: DCBA
Chuỗi ít ký tự thì chúng ta có thể ghi tay ra, nhưng nếu chuỗi đó >10, 10!= 3.628.800 cách sắp xếp thì sao?
Cách giải quyết là dùng lập trình để tự động tìm ra các cách đảo này.
Mong các cao thủ giúp đỡ.
Đây là bài toán HOÁN VỊ ---> Dùng code VBA ra ngay thôi
Mã:
Dim n As Long, Arr(1 To 362880, 1 To 1)
Sub Main()
  Dim Num As String
  Num = "[COLOR=#ff0000]ABCD[/COLOR]"
  n = 1
  GetPermu "", Num
  Range("A1").Resize(n - 1) = Arr
End Sub
Mã:
Sub GetPermu(x As String, y As String)
  Dim i As Long, j As Long
  j = Len(y)
  If j < 2 Then
    Arr(n, 1) = x & y
    n = n + 1
  Else
    For i = 1 To j
      GetPermu x & Mid(y, i, 1), Left(y, i - 1) & Right(y, j - i)
    Next
  End If
End Sub
Chạy sub Main sẽ có kết quả như ý
 
Xin lỗi, mình chạy báo lỗi : Comblile e r r o r. Sub or function not definied
 
Sr, được rồi, máy mình bị dính chữ. cám ơn rất nhiều
 
NHƯ TIÊU ĐỀ MÌNH ĐÃ VIẾT, CÁI NÀY TỪ KHI OFFICE EXCEL RA Đời thì mình đã nghĩ tới rối, nhưng mãi tới hôm nay vẫn chưa tìm ra cách nào, nhưng mình nghĩ là được.
mong các cao thủ trên thế giới giúp đỡ.
Cụ thể như sau: Ta có ABCD là chuỗi 4 kí tự, thì sẽ có tất cả 4!=24 cách đảo, cụ thể :
1: ABCD
2: ABDC
3: ACBD
3: ACDB
5: ....
24: DCBA
Chuỗi ít ký tự thì chúng ta có thể ghi tay ra, nhưng nếu chuỗi đó >10, 10!= 3.628.800 cách sắp xếp thì sao?
Cách giải quyết là dùng lập trình để tự động tìm ra các cách đảo này.
Mong các cao thủ giúp đỡ.

Tôi tin là code nhanh hơn của ndu. Tôi đã thử với chuỗi 10 ký tự. Đọc thời gian từ khi gọi hàm tới khi hàm trở về thôi. Chứ đọc cả thời gian "đập" mảng được trả về xuống sheet thì ... đợi tới ngày tận thế - với hơn 3,6 triệu giá trị!!!
Chú ý là không thử với 11 ký tự nếu bạn không đủ kiên nhẫn.

Bài #4 trong chủ đề sau:

http://www.giaiphapexcel.com/forum/...c-tổ-hợp-số-có-bốn-chữ-số&p=440412#post440412
 
Web KT

Bài viết mới nhất

Back
Top Bottom