E chào ac ạ…e đang mắc 1 bài toán như này:
Tính số nghiệm của bài toán lớp 3
Với các biến a,b,c,d,e,f,g,h,i là các số nằm trong khoảng 1-9 (các biến có
thể có giá trị giống nhau), dạng biểu thức:
a + 13 * b / c + d + 12 * e – f – 11 + g * h / i – 10 = 66
e đã thử nó bằng các vòng lặp for nhưng nó có vẻ không khả thi lắm, 9 vòng lặp lận,
a chị có cách làm hay hơn chỉ e với ạ. e cảm ơn ạ.
9 vòng lặp, mỗi vòng lặp 9 lần. Có đáng là bao?
Ngoài ra có thể thấy là vế trái tăng khi a, b, d, e, g, h tăng, vế trái giảm khi c, f, i tăng. Như vậy có thể giảm bớt số lần lặp của mỗi vòng bằng việc so sánh.
Không đến mức 9 vòng lặp đâu.
Nếu / là phép chia thực, mà 13 * b / c là số nguyên, 1 <= b, c <= 9 -> b == c vì 13 nguyên tố cùng nhau với tất cả các số từ 1 đến 9.
Biểu thức trên
<-> a + 13 + d + 12 * e - f + g * h / i = 66 + 10 + 11
<-> a + d + 12 * e - f + g * h / i = 66 + 10 + 11 - 13
<-> (a + d - f + g * h / i) + 12 * e = 74
Chạy g, h, i trước, rồi mới chạy a, d, f, rồi kiểm tra e. Hoặc có thể chạy e trước với điều kiện của e: 12 * e chia hết cho 12, mà 12 * e <= 74 -> 1 <= e <= 6.
Chạy g, h, i trước:
for g in range(1, 10):
for h in range(1, 10):
for i in range(1, min(g * h, 9) + 1):
if (g * h) % i == 0:
for a...
for d...
for f...
twelve_e = 74 - (a + d - f + (g * h) / i)
if twelve_e % 12 == 0 and 12 <= twelve_e < 74:
print(a, b, c, d, e, f, g, h, i) # b == c, lấy bất kì
Có 6 vòng lặp thôi chứ mấy. Thêm 1 vòng chọn 1 số b bất kì nữa là 7.