You are on page 1of 13

1. Có bao nhiêu xâu nhị phân độ dài 3?

 Đáp án: 8
2. Trong các xâu độ dài 3, xếp theo thứ tự từ điển, xâu thứ 4 là? Đáp án: 011
3. Tìm xâu nhị phân đứng sau xâu 011? Đáp án: 100
4. Có bao nhiêu hoán vị của 3 vật? Trả lời: 6
5. Trong các hoán vị của 1, 2, 3, theo thứ tự từ điển, hoán vị thứ 2 là? Trả lời: 132
6. Xét các hoán vị của 1, 2, 3, 4. Theo thứ tự từ điển, hoán vị đứng sau 2431
là? Trả lời: 3124
7. Có bao nhiêu cách xếp 3 vật lấy ra từ 5 vật? Trả lời: 60
8. Trong các chỉnh hợp chập 3 của 1, 2, 3,4 theo thứ tự từ điển, chỉnh hợp thứ 9
là? Trả lời: 231
9. Có bao nhiêu cách chọn 3 vật từ 5 vật? Trả lời: 10
10. Trong các tổ hợp chập 3 của 1, 2, 3, 4, 5, theo thứ tự từ điển, tổ hợp thứ 5
là? Trả lời: 135

liệt kê các xâu nhị phân


n=2
def generate_binary_strings(n,a=""):
if n == 0:
print(a)
else:
generate_binary_strings(n - 1, a + "0")
generate_binary_strings(n - 1, a + "1")
generate_binary_strings(n)

generate_binary_strings(n - 1, a + "0") //hàm đệ quy giảm giá trị

Hoán vị của 1,2,3


Cách 1
n=3
def permutations(n):
if n==1:
return[[1]]
A=[]
for a in permutations(n-1):
for i in range(n):
b=a.copy()
b.insert(i,n)
A.append(b)
return sorted(A)
permutations(

def permutations(a):
count=0
if len(a) == 1:
return [[a[0]]]
A = []
n = len(a)
for p in permutations(a[1:]):
for i in range(n):
b = p[:i] + [a[0]] + p[i:]
A.append(b)
count+=1
return sorted(A)
count
permutations([1,3,6,7,10])

Cách2
def permutations(l):
if len(l)==1:
return [l]
A=[]
n=len(l)
for i in range(n):
lc=l.copy()
x=lc.pop(i)
for a in permutations(lc):
a.insert(0,x)
A.append(a)
return A
permutations([1,2,3])
Chỉnh hợp
def permutations(n,r):
if r == 1:
return [[i] for i in range(1, n+1)]
A = []
for a in permutations(n, r-1):
for i in range(1, n+1):
if i not in a:
A.append(a+[i])
return A
permutations(4,3)

import itertools

def permutations(a, r):


A = []
for p in itertools.permutations(a, r):
A.append(list(p))
return A

permutations([1,3,6,7,10], 2)

Tổ hợp

def combination(a,r):
if r==1:
return [[i] for i in a]
A=[]
n=len(a)
for i in range(n-r+1):
for c in combination(a[i+1:],r-1):
A.append([a[i]]+c)
return A
combination([1,2,3,4,5],3)
Tổ hợp lặp

#Liệt kê số nghiệm nguyên không âm của x1 + x2 + ... + xn = r


def sols(n, r):
if n == 1:
return [[r]]
A = []
for k in range(r+1):
for a in sols(n-1, r-k):
a.insert(0, k)
A.append(a)
return A
sols(4,1)
Hoán vị lặp

I. Phép cộng

n=10
count=0
for i in range(1,n+1):
for j in range(1,i+1):
print(i,j)
count+=1
count

from sympy import *


n, i = symbols('n i')
Sum(i, (i, 1, n)).doit().simplify()

II. Phép nhân


m=5
n=6
c=0
for i in range(m):
for j in range(n):
c+=1
print(i, j,c)

Tìm tất cả các số có ba chữ số thỏa mãn điều kiện là tổng giai thừa của các
chữ số đó bằng chính số đó.
for i in range(100, 1000):
a = i // 100
b = (i // 10) % 10
c = i % 10

a_factorial = 1
b_factorial = 1
c_factorial = 1
for j in range(1, a+1):
a_factorial *= j

for j in range(1, b+1):


b_factorial *= j

for j in range(1, c+1):


c_factorial *= j

if a_factorial + b_factorial + c_factorial == i:


print(i)

Chương 2
Kéo theo logic: quy tắc suy luận
Bảng chân lí
5) Luật phân phối
 p∨(q∧r)⇔(p∨q)∧(p∨r)
p ∧ (q ∨ r) ⇔ (p ∧ q) ∨ (p ∧ r)

p q pq
→ ⇔¬ ∨

Đối ngẫu
Đối ngẫu đổi lại hết các dấu không thay đổi thứ tự tính toán bằng cách thêm ngoặc.
Chỉ dành cho ^ và tuyển.

Lượng từ
Thuật toán tính ∀x ∈ U, p(x)

Kiểm tra số nguyên tố

N là số nguyên tố nếu mọi số nguyên từ 2 đến n−1 đều không là ước của n.

def is_prime(n):
for k in range(2, n):
if n%k==0:
return False
return True
is_prime(7)

N là hợp số nếu có số nguyên từ 2 đến n−1 là ước của n.

Kiểm tra hợp số

def is_prime(n):
for k in range(2, n):
if n%k==0:
return True
return False
is_prime(7)

Tương đương phổ cập

You might also like