Các bạn học sinh tiểu học rất thích các dấu hiệu nhận biết số chia hết. Ban tổ chức quyết định đưa
ra hai số 𝑁 và 𝑀. Thí sinh nào tìm ra số 𝐴 lớn nhất được tạo bởi các chữ số của 𝑁 mà chia hết cho số
𝑀 (𝑀 là số chẵn từ 2 đến 10) thì sẽ nhận được một bánh trung thu in logo của cuộc thi cho mỗi câu
hỏi.
(C++ e chưa học^^E đang học thonny thou)
Quảng cáo
1 câu trả lời 26
def find_largest_A(N, M):
# Chuyển số N thành danh sách các chữ số và sắp xếp giảm dần
digits = sorted(list(str(N)), reverse=True)
# Trường hợp chia hết cho 10: Số cuối cùng phải là 0
if M == 10:
if '0' in digits:
digits.remove('0')
return "".join(digits) + '0'
return -1
# Trường hợp chia hết cho 2: Số cuối cùng phải chẵn (0, 2, 4, 6, 8)
if M == 2:
# Tìm chữ số chẵn nhỏ nhất để đặt ở hàng đơn vị
even_digits = [d for d in digits if int(d) % 2 == 0]
if not even_digits:
return -1
last_digit = min(even_digits)
digits.remove(last_digit)
return "".join(digits) + last_digit
# Trường hợp chia hết cho 4: 2 chữ số cuối tạo thành số chia hết cho 4
if M == 4:
best_A = ""
# Thử mọi cặp chữ số làm hàng chục (j) và hàng đơn vị (i)
for i in range(len(digits)):
for j in range(len(digits)):
if i == j: continue
if int(digits[j] + digits[i]) % 4 == 0:
temp = digits[:]
d_i, d_j = digits[i], digits[j]
temp.remove(d_i)
temp.remove(d_j)
current_A = "".join(temp) + d_j + d_i
if current_A > best_A:
best_A = current_A
return best_A if best_A else -1
# Trường hợp chia hết cho 6: Tổng chữ số chia hết cho 3 và số cuối chẵn
if M == 6:
total_sum = sum(int(d) for d in digits)
if total_sum % 3 != 0: return -1 # Nếu tổng không chia hết cho 3 thì không thể tạo số chia hết cho 6
even_digits = [d for d in digits if int(d) % 2 == 0]
if not even_digits: return -1
last_digit = min(even_digits)
digits.remove(last_digit)
return "".join(digits) + last_digit
# Trường hợp chia hết cho 8: 3 chữ số cuối tạo thành số chia hết cho 8
if M == 8:
best_A = ""
for i in range(len(digits)): # đơn vị
for j in range(len(digits)): # chục
for k in range(len(digits)): # trăm
if i == j or j == k or i == k: continue
if int(digits[k] + digits[j] + digits[i]) % 8 == 0:
temp = digits[:]
d_i, d_j, d_k = digits[i], digits[j], digits[k]
temp.remove(d_i); temp.remove(d_j); temp.remove(d_k)
current_A = "".join(temp) + d_k + d_j + d_i
if current_A > best_A:
best_A = current_A
return best_A if best_A else -1
# Ví dụ sử dụng:
N = 12345
M = 4
print(f"Số lớn nhất từ {N} chia hết cho {M} là: {find_largest_A(N, M)}")
Quảng cáo
Bạn cần hỏi gì?
Câu hỏi hot cùng chủ đề
-
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
Trong phần mềm Logo, để rùa lùi lại 100 bước ta gõ lệnh sau. A. FD 100 B. BK 100 C. RT 100 D. LT 10010043 -
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
9262 -
Hỏi từ APP VIETJACK8558
