Bài tập Mimgo Lập trình Python - Phần 4
Ôn tập
Danh sách bài tập
Note: Đề bài được tạo bằng pipeline scrape từ web trường (Moodle PHP) về, và reformat từng bài bằng Gemini 2.0 Flash (sửa lại markdown, nếu có ảnh, dịch ra latex hoặc sử dụng ASCII để minh họa). Để AI tự code rồi tự check trên Mimgo thì chắc cũng được nhưng mà thôi 🥴.
4.1 Tìm phần tử duy nhất trong danh sách
- Cho một danh sách các số nguyên, trong đó các phần tử đều xuất hiện đúng 2 lần, ngoại trừ duy nhất 1 phần tử xuất hiện đúng 1 lần. Tìm phần tử xuất hiện đúng 1 lần trong danh sách.
- Ví dụ:
a = [1,2,3,2,3,1,4,5,4]
phần tử cần tìm là 5 - Hoàn thiện hàm
findUniq(a)
. - Hàm này nhận đối số a là danh sách số nguyên và trả về 1 số nguyên là phần tử xuất hiện duy nhất 1 lần trong danh sách a.
- Chú ý, test chương trình sẽ khá lớn, bạn nên làm với thuật toán với độ phức tạp ~O(n), với các giải thuật với độ phức tạp lớn hơn có thể chương trình sẽ không đạt được điểm tối đa.
- Chương trình bạn cần chạy trong thời gian <= 100000 microsecond (100 ms)
def findUniq(a):
result = 0
for num in a:
result ^= num
return result
4.2 Liệt kê các số
- Viết chương trình tìm tất cả các số chia hết cho 11 nhưng không phải bội số của 3, nằm trong đoạn a và b (tính cả a và b). Với a, b là các số nguyên được nhập từ bàn phím. Các số thu được sẽ được in thành chuỗi trên một dòng, cách nhau bằng dấu chấm phẩy và dấu cách “; ”.
a = int(input())
b = int(input())
res = [str(i) for i in range(min(a, b), max(a, b) + 1) if i % 11 == 0 and i % 3 != 0]
print("; ".join(res))
4.3 Sinh từ điển
Nhập số nguyên dương từ bàn phím, hãy viết chương trình để tạo ra một dictionary chứa (i, và đảo ngược của i*i) với i là số nguyên từ 1 đến n (bao gồm cả 1 và n) sau đó in ra dictionary này. Ví dụ: Giả sử số n là 8 thì đầu ra sẽ là: {1: 1, 2: 4, 3: 9, 4: 61, 5: 52, 6: 63, 7: 94, 8: 46}.
n = int(input())
d = {i: int(str(i * i)[::-1]) for i in range(1, n + 1)}
print(d)
4.4 Từ điển xâu đối xứng
Nhập vào một danh sách các chuỗi từ một dòng từ bàn phím (mỗi chuỗi cách nhau bởi 1 dấu cách), sinh ra từ điển gồm khóa là chuỗi s, và giá trị là xâu đối xứng tạo được từ s và đảo ngược của s. Ví dụ s = “abc”, xâu đối xứng là “abccba”. In từ điển ra màn hình.
s = input().split()
d = {x: x + x[::-1] for x in s}
print(d)
4.5 Số chia hết cho 5
Viết một chương trình chấp nhận đầu vào là chuỗi các số nhị phân 4 chữ số, phân tách bởi dấu phẩy, kiểm tra xem chúng có chia hết cho 5 không. Sau đó in các số chia hết cho 5 thành dãy phân tách bởi dấu phẩy.
- Ví dụ đầu vào là: 0100,0011,1010,1001
- Đầu ra sẽ là: 1010
items = input().split(',')
res = [x for x in items if int(x, 2) % 5 == 0]
print(','.join(res))
4.6 Tính giá trị
Viết một chương trình tính giá trị của a+aa+aaa+aaaa với a là số được nhập vào bởi người dùng. Giả sử a được nhập vào là 1 thì đầu ra sẽ là: 1+11+111+1111 = 1234.
a = input()
a1 = int(a)
a2 = int(a * 2)
a3 = int(a * 3)
a4 = int(a * 4)
print(a1 + a2 + a3 + a4)
4.7 Bank account query
Viết chương trình tính số tiền thực của một tài khoản ngân hàng dựa trên nhật ký giao dịch được nhập vào từ giao diện điều khiển. Định dạng nhật ký được hiển thị như sau:
D 100
W 200
(D là tiền gửi, W là tiền rút ra).
Giả sử đầu vào được cung cấp là:
D 300
D 300
W 200
D 100
Thì đầu ra sẽ là:
500
Đầu vào được nhập từ bàn phím trên từng dòng, việc nhập kết thúc khi gặp dòng trống.
balance = 0
while True:
try:
line = input()
if not line:
break
action, amount = line.split()
amount = int(amount)
if action == 'D':
balance += amount
elif action == 'W':
balance -= amount
except:
break
print(balance)