Tính to hợp trong python

Code Python #13 – Dùng đệ quy tính tổ hợp C(n,k) trong python.

source

Xem ngay video Let's Code Python #13: Dùng đệ quy tính tổ hợp C(n,k) trong python

Code Python #13 – Dùng đệ quy tính tổ hợp C(n,k) trong python.

Let's Code Python #13: Dùng đệ quy tính tổ hợp C(n,k) trong python “, được lấy từ nguồn: https://www.youtube.com/watch?v=cII7yfn9GFo

Tags của Let's Code Python #13: Dùng đệ quy tính tổ hợp C(n,k) trong python: #Let39s #Code #Python #Dùng #đệ #quy #tính #tổ #hợp #Cnk #trong #python

Bài viết Let's Code Python #13: Dùng đệ quy tính tổ hợp C(n,k) trong python có nội dung như sau: Code Python #13 – Dùng đệ quy tính tổ hợp C(n,k) trong python.

Tính to hợp trong python

Từ khóa của Let's Code Python #13: Dùng đệ quy tính tổ hợp C(n,k) trong python: tổ hợp

Thông tin khác của Let's Code Python #13: Dùng đệ quy tính tổ hợp C(n,k) trong python:
Video này hiện tại có lượt view, ngày tạo video là 2022-02-19 11:21:08 , bạn muốn tải video này có thể truy cập đường link sau: https://www.youtubepp.com/watch?v=cII7yfn9GFo , thẻ tag: #Let39s #Code #Python #Dùng #đệ #quy #tính #tổ #hợp #Cnk #trong #python

Cảm ơn bạn đã xem video: Let's Code Python #13: Dùng đệ quy tính tổ hợp C(n,k) trong python.

About The Author



Viết một chương trình tính giai thừa của một số nguyên dương n. Với n được nhập từ bàn phím.

Định nghĩa giai thừa: giai thừa của 1 số là tích các số liên tiếp từ 1 đến số đó. Trường hợp đặc biệt, giai thừa của 0 và 1 là 1.

Ví dụ, n = 8 thì kết quả đầu ra phải là 1*2*3*4*5*6*7*8 = 40320.

Có 2 cách để viết chương trình tính giai thừa trong python:

  • Tính giai thừa không sử dụng hàm đệ quy
  • Tính giai thừ có sử dụng hàm đệ quy


1. Tính giai thừa không sử dụng đệ quy

Ví dụ chương trình tính giai thừa trong python không sử dụng phương pháp đệ quy:

Code mẫu: tính giai thừa không sử dụng hàm đệ quy

"""
 * tinh giai thua
 *
 * @author viettuts.vn
 * @param n: so nguyen duong
 * @return giai thua cua so n
"""
def tinhgiaithua(n):
    giai_thua = 1;
    if (n == 0 or n == 1):
        return giai_thua;
    else:
        for i in range(2, n + 1):
            giai_thua = giai_thua * i;
        return giai_thua;

n = int(input("Nhập số nguyên dương n = "));
print("Giai thừa của", n, "là", tinhgiaithua(n));

Kết quả:

Nhập số nguyên dương n = 10
Giai thừa của 10 là 3628800


2. Tính giai thừa có sử dụng đệ quy

Ví dụ chương trình tính giai thừa trong python có sử dụng phương pháp đệ quy:

Code mẫu: tính giai thừa sử dụng hàm đệ quy

n = int(input("Nhập số cần tính giai thừa: "))

def giaiThua(n):
    if n == 0:
        return 1
    return n * giaiThua(n - 1)

print (giaiThua(n))

Kết quả:

Nhập số cần tính giai thừa: 8
40320



Sau khi đã giải được 20 Bài tập Python cơ bản có lời giải, mời bạn tiếp tục thử sức các bài tập Python chỉ sử dụng vòng lặp và các kiểu dữ liệu cơ bản như kiểu danh sách list, kiểu xâu str.

Bài 1. [Đại học Thái Nguyên 2000] Từ các chữ số 1; 2; 3 có thể lập được bao nhiêu số tự nhiên gồm 5 chữ số có mặt đủ 3 chữ số nói trên?

Đáp số: 150 số.

Hướng dẫn. Đầu tiên sử dụng 5 vòng lặp để tạo một danh sách tất cả các số tự nhiên gồm 5 chữ số được tạo thành từ các chữ số 1, 2, 3. Sau đó duyệt qua tất cả các phần tử của danh sách này và dùng hàm membership in để kiểm tra xem phần tử đó có mặt cả ba chữ số 1, 2, 3 hay không. Nếu có thì tăng biến đếm count, và in phần tử đó ra nếu muốn.

numbers = ['1', '2', '3']
results = []

for a in numbers:
  for b in numbers:
    for c in numbers:
      for d in numbers:
        for e in numbers:
          # results.append([a,b,c,d,e])
          results.append(a+b+c+d+e)

count = 1

for temp in results:
  # print(temp)
  if ('1' in temp) and ('2' in temp) and ('3' in temp):
    print(str(count) +': '+temp)
    count +=1

Bài 2. Có bao nhiêu số tự nhiên gồm 5 chữ số và chia hết cho 7.

Đáp số: 12857 số.

Hướng dẫn. Sử dụng một biến đếm count. Duyệt tất cả các số tự nhiên có 5 chữ số (từ 10000 đến 99999) và kiểm tra xem số đó có chia hết cho 7 hay không. Nếu có thì tăng biến đếm. Có thể in ra số đó nếu muốn.

count = 0
for i in range(10000, 99999 + 1):	
  if (i % 7 == 0):
    count += 1
    print(str(count) + ': ' + str(i))

Bài 3. Một em bé có thể mang họ cha là Nguyễn, hoặc họ mẹ là Lê; tên đệm có thể là Văn, Hữu hoặc Đình; tên có thể là Nhân, Nghĩa, Trí hoặc Dũng. Hỏi có bao nhiêu cách đặt tên cho bé?

Đáp số. Có 24 cách đặt tên.

bien_dem = 1
ho = ['Nguyễn', 'Lê']
dem = ['Văn', 'Hữu', 'Đình']
ten = ['Nhân', 'Nghĩa', 'Trí', 'Dũng']
for h in ho:
  for d in dem:
    for t in ten:
      print(str(bien_dem) + ': ' + h + ' ' + d + ' ' + t)
      bien_dem += 1

Bài 4. [Đại học An Ninh 1997] Từ các chữ số từ 0 đến 6 có thể lập được bao nhiêu số tự nhiên chẵn gồm 3 chữ số khác nhau?

Nếu sử dụng kiểu dữ liệu tập hợp set, chúng ta có thể in trực tiếp ra các số thỏa mãn yêu cầu:

numbers_even = {'0', '2', '4', '6'}
numbers_odd = {'1', '3', '5'}
numbers = numbers_even | numbers_odd

results = []
count = 0

for c in numbers_even:
  for a in (numbers - {'0'}):
    if (a != c):
      for b in numbers:
        if ( b!=a and b!= c):
          count += 1
          print(str(count) + ': ' +a+b+c)

Cách khác, chúng ta không sử dụng kiểu dữ liệu tập hợp thì sẽ in ra rất cả các số tự nhiên chẵn sau đó loại đi các số mà có chữ số giống nhau:

count = 0
results =[]

for a in range(1,7):
  for b in range(0,7):
    for c in {0,2,4,6}:
      results.append(str(a)+str(b)+str(c))

temp = []
for x in results:
  if not((x[0] == x[1]) or (x[0]==x[2]) or (x[1]==x[2])):
    temp.append(x)
print(len(temp))
print(temp)

Bài 5. Từ các chữ số 0,1,2,3,4,5,6 có thể lập được bao nhiêu số tự nhiên gồm 3 chữ số khác nhau và phải có mặt chữ số 5?

Đáp số: 80 số.

count = 0
results =[]

for a in range(1,7):
  for b in range(0,7):
    for c in range(0,7):
      results.append(str(a)+str(b)+str(c))

temp = []
for x in results:
  if not((x[0] == x[1]) or (x[0]==x[2]) or (x[1]==x[2])) and ('5' in x):
    temp.append(x)
print(len(temp))
print(temp)