Cách tạo ra nhiều tổ hợp (1 người xem)

Người dùng đang xem chủ đề này

ancrayzy

Thành viên chính thức
Tham gia
15/9/08
Bài viết
67
Được thích
4
Chào mọi người, mình muốn mọi người hướng dẫn giúp tạo bảng tính như thế nào để giải quyết bài toán dưới dây:
Khi nhập 1 giá trị L, bảng tính sẽ tổ hợp tất cả các trường hợp có thể xảy ra sao cho: L= x*a+y*b <= c
Trong đó:
a có 4 giá trị là 500, 1000, 1500, 2000, b có 2 giá trị là 0 hoặc 200, c có giá trị từ 600 -> 900
x là số lượng a, y là số lượng b
Dưới đây là hình minh họa

excel.PNG
Cảm ơn mọi người.
 
Chào mọi người, mình muốn mọi người hướng dẫn giúp tạo bảng tính như thế nào để giải quyết bài toán dưới dây:
Khi nhập 1 giá trị L, bảng tính sẽ tổ hợp tất cả các trường hợp có thể xảy ra sao cho: L= x*a+y*b <= c
Trong đó:
a có 4 giá trị là 500, 1000, 1500, 2000, b có 2 giá trị là 0 hoặc 200, c có giá trị từ 600 -> 900
x là số lượng a, y là số lượng b
Dưới đây là hình minh họa

View attachment 236159
Cảm ơn mọi người.
Gửi file giả lập lên đi bạn
 
Chào mọi người, mình muốn mọi người hướng dẫn giúp tạo bảng tính như thế nào để giải quyết bài toán dưới dây:
Khi nhập 1 giá trị L, bảng tính sẽ tổ hợp tất cả các trường hợp có thể xảy ra sao cho: L= x*a+y*b <= c
Trong đó:
a có 4 giá trị là 500, 1000, 1500, 2000, b có 2 giá trị là 0 hoặc 200, c có giá trị từ 600 -> 900
x là số lượng a, y là số lượng b
Dưới đây là hình minh họa
Cảm ơn mọi người.
Biểu thức màu đỏ là chính xác đúng yêu cầu của bạn?
 
Biểu thức màu đỏ là chính xác đúng yêu cầu của bạn?
Đúng rồi bạn, trong công file tính toán mình muốn để các giá trị của a, b nằm riêng từng ô để điều chỉnh giá trị linh động và thêm bớt một trong các số (500, 1000, 1500, 2000) được.
 
Đúng rồi bạn, trong công file tính toán mình muốn để các giá trị của a, b nằm riêng từng ô để điều chỉnh giá trị linh động và thêm bớt một trong các số (500, 1000, 1500, 2000) được.
Có lẽ bạn làm rõ thêm chỗ này
L= x*a+y*b <= c
với 600<c<900 có lẽ chỉ có 1*500+1*200 là đạt yêu cầu.
nếu a>=1000 thì coi như không thỏa mãn.
 
Có lẽ bạn làm rõ thêm chỗ này
L= x*a+y*b <= c
với 600<c<900 có lẽ chỉ có 1*500+1*200 là đạt yêu cầu.
nếu a>=1000 thì coi như không thỏa mãn.
Diễn giải theo L= x*a+y*b <= c không chính xác, cứ theo điều kiện giá trị ô L2 thỏa: 600<= L2<=900
 
Có lẽ bạn làm rõ thêm chỗ này
L= x*a+y*b <= c
với 600<c<900 có lẽ chỉ có 1*500+1*200 là đạt yêu cầu.
nếu a>=1000 thì coi như không thỏa mãn.

Diễn giải theo L= x*a+y*b <= c không chính xác, cứ theo điều kiện giá trị ô L2 thỏa: 600<= L2<=900

Có lẽ thớt chưa từng học môn toán "bất đẳng thức" cho nên không hiểu ý nghĩa của ký hiệu <= trong toán học.
Phương trình kia phải viết là
L= x*a+y*b + c
Hay đúng với toán hơn (thừa số đi trước biến số):
L = ax + by + c
mới đúng

Và diễn theo điều kiện yêu cầu thì là
L = a1x1 + a2x2 + a3x3 + a4x4 + by + c
x1 = 2000, x2 = 1500, x3 = 1000, x4 = 500
y = 200
c = [600,700,800,900]

Rốt cuộc, đây là dạng bài toán đếm mệnh giá tiền.
(cho một số mệnh giá tiền, có bao nhiêu cách để tổng thành L)
 
Lần chỉnh sửa cuối:
Có lẽ thớt chưa từng nhọc môn toán "bất đẳng thức" cho nên không hiểu ý nghĩa của ký hiệu <= trong toán học.
Phương trình kia phải viết là
L= x*a+y*b + c
mới đúng
L= x*a+y*b + c : ý này chưa đúng bạn nhé, mà phải thỏa điều kiện 600 <= c <=900. Tức là giá trị của c sẽ chạy từ 600~900.
Xin lỗi vì mình diễn giải chưa rõ nhé :D
 
Có lẽ thớt chưa từng học môn toán "bất đẳng thức" cho nên không hiểu ý nghĩa của ký hiệu <= trong toán học.
Phương trình kia phải viết là
L= x*a+y*b + c
Hay đúng với toán hơn (thừa số đi trước biến số):
L = ax + by + c
mới đúng

Và diễn theo điều kiện yêu cầu thì là
L = a1x1 + a2x2 + a3x3 + a4x4 + by + c
x1 = 2000, x2 = 1500, x3 = 1000, x4 = 500
y = 200
c = [600,700,800,900]

Rốt cuộc, đây là dạng bài toán đếm mệnh giá tiền.
(cho một số mệnh giá tiền, có bao nhiêu cách để tổng thành L)
Y=0 hoặc Y=200
Và các tham số nên để từng cell riêng để có thể điều chỉnh được nữa bạn
 
Lần chỉnh sửa cuối:
@ancrayzy
L2=x*a+y*b<=c
Tất nhiên là tôi hiểu cách bạn viết biểu thức trên.

Nhưng ý tôi muốn hỏi là bạn chốt biểu thức trên là đúng yêu cầu của đầu bài?
Bài đã được tự động gộp:

Diễn giải theo L= x*a+y*b <= c không chính xác, cứ theo điều kiện giá trị ô L2 thỏa: 600<= L2<=900
Cái này chưa chắc nhé bác.
Trong file có nói là L được tính thế nào đâu, chỉ nói là nhập tay L vào kia mà :).

Chào mọi người, mình muốn mọi người hướng dẫn giúp tạo bảng tính như thế nào để giải quyết bài toán dưới dây:
Khi nhập 1 giá trị L, bảng tính sẽ tổ hợp tất cả các trường hợp có thể xảy ra sao cho: L= x*a+y*b <= c
Trong đó:
a có 4 giá trị là 500, 1000, 1500, 2000, b có 2 giá trị là 0 hoặc 200, c có giá trị từ 600 -> 900
x là số lượng a, y là số lượng b
Dưới đây là hình minh họa
Cảm ơn mọi người.
 
Lần chỉnh sửa cuối:
Y=0 hoặc Y=200
Và các tham số nên để từng cell riêng để có thể điều chỉnh được nữa bạn
Bất cứ ai biết toán số đều thấy số lẻ dưới 100 của c cũng là số lẻ của L.
Vì vậy, số lẻ ấy không quan trọng.

Và các tham số tôi đã cho thấy cách đặt cells rồi, ở bài #11.
x1 = 2000, x2 = 1500, x3 = 1000, x4 = 500
y = 200
c = [600,700,800] + số lẻ (1-100)

Cách xếp ở đầu bài #1 đọc muốn nổ con mắt.
 
Lần chỉnh sửa cuối:
@ancrayzy
L2=x*a+y*b<=c
Tất nhiên là tôi hiểu cách bạn viết biểu thức trên.

Nhưng ý tôi muốn hỏi là bạn chốt biểu thức trên là đúng yêu cầu của đầu bài?
Bài đã được tự động gộp:


Cái này chưa chắc nhé bác.
Trong file có nói là L được tính thế nào đâu, chỉ nói là nhập tay L vào kia mà :).
B2 là giá trị nhập tay có thể thay đổi, tìm các số ở cột D tới cột K sao cho cột giá trị cột L nằm trong khoảng 600 đến 900
 
1587562399611.png

Công thức khác:
H3 =SUMPRODUCT($B$2:$F$2,$B3:$F3)+$G3=$A3
I3 =$G3=MEDIAN($G3,600, 900)
J3 =$F3<=1

Ở dòng 9, thử các trị khác nhau cho các cột B:F cho đến khi H:J đều True

Chú: tôi chỉ diễn tả lô gic của bài toán; quy thức trên không hẳn là giải thuật.
 
View attachment 236227

Công thức khác:
H3 =SUMPRODUCT($B$2:$F$2,$B3:$F3)+$G3=$A3
I3 =$G3=MEDIAN($G3,600, 900)
J3 =$F3<=1

Ở dòng 9, thử các trị khác nhau cho các cột B:F cho đến khi H:J đều True

Chú: tôi chỉ diễn tả lô gic của bài toán; quy thức trên không hẳn là giải thuật.
Thuật toán:
L là số nhập
Chuyển điều kiện C: 600 đến 900 thành 0 đến 300 và số nhập mới giảm 600: L-600
Xét 2 khả năng của C:
C=0: điều kiện thỏa khi ((L-600) mod 500) <=300, tmp= (L-600) - ((L-600) mod 500)
C=200: điều kiện thỏa khi ((L-600-200) mod 500) <=300, tmp= (L-600-200) - ((L-600-200) mod 500)
Xét các khả năng các số 500,1000,1500,2000 tối đa 7 số cộng lại bằng tmp
 
@ancrayzy
Giả sử B2=7800.
x=0 với mọi a
y=35
biểu thức x*a + y*b = 7000 => 7800-7000=800.

Các giá trị trên có được coi là hợp lệ?
 
Chào mọi người, mình muốn mọi người hướng dẫn giúp tạo bảng tính như thế nào để giải quyết bài toán dưới dây:
Khi nhập 1 giá trị L, bảng tính sẽ tổ hợp tất cả các trường hợp có thể xảy ra sao cho: L= x*a+y*b <= c
Trong đó:
a có 4 giá trị là 500, 1000, 1500, 2000, b có 2 giá trị là 0 hoặc 200, c có giá trị từ 600 -> 900
x là số lượng a, y là số lượng b
Dưới đây là hình minh họa

View attachment 236159
Cảm ơn mọi người.
Bạn thử code này:
 

File đính kèm

Lần chỉnh sửa cuối:
Đúng là mình cần tổ hợp như thế này, nhưng xóa dữ liệu trong ô E1 là 1500 thì kết quả vẫn hiện ở cột E. Mình muốn khi xóa dữ liệu ô nào thì kết quả không liên quan đến ô đó nữa :D
View attachment 236245
Bạn vô code sữa lại chỗ a, thêm bớt gì cũng được, kết quả trả về đúng như thứ tự a mà bạn sữa, 2 cột cuối là b,c
1587603274917.png
 
@ancrayzy
Giả sử B2=7800.
x=0 với mọi a
y=35
biểu thức x*a + y*b = 7000 => 7800-7000=800.

Các giá trị trên có được coi là hợp lệ?

Không bạn ạ, ví dụ trong biểu thức này:
L = a1*x1 + a2*x2 + a3*x3 + a4*x4 + b*y + c
Trong đó:
x1 = 2000
x2 = 1500
x3 = 1000
x4 = 500
y = 200 hoặc 0
a là số nguyên dương hoặc bằng 0
b = 1 hoặc 0
600 <= c <= 900
Và bảng tính có thể thay đổi các giá trị tham số bên trên.
Ưu tiên lọc kết quả cho các biến : a1, a2, a3, a4 hiển thị từ lớn đến nhỏ.
Cảm ơn mọi người.
 
Không bạn ạ, ví dụ trong biểu thức này:
L = a1*x1 + a2*x2 + a3*x3 + a4*x4 + b*y + c
Trong đó:
x1 = 2000
x2 = 1500
x3 = 1000
x4 = 500
y = 200 hoặc 0
a là số nguyên dương hoặc bằng 0
b = 1 hoặc 0
600 <= c <= 900
Và bảng tính có thể thay đổi các giá trị tham số bên trên.
Ưu tiên lọc kết quả cho các biến : a1, a2, a3, a4 hiển thị từ lớn đến nhỏ.
Cảm ơn mọi người.
Vậy là tích y*b chỉ có thể là 2 giá trị = 0 hoặc = 200?
 
Vậy là tích y*b chỉ có thể là 2 giá trị = 0 hoặc = 200?
Đúng rồi bạn
Bài đã được tự động gộp:

Bạn vô code sữa lại chỗ a, thêm bớt gì cũng được, kết quả trả về đúng như thứ tự a mà bạn sữa, 2 cột cuối là b,c
View attachment 236246
Bỏ bớt 1500 mà nó vẫn chạy bạn ơi :D
 
Lần chỉnh sửa cuối:
Lần chỉnh sửa cuối:
Có thể nào điều chỉnh thủ công các giá trị trực tiếp trên cell mà không phải vào VB không bạn :D
Bài đã được tự động gộp:


Sửa 900 thành 800 bị lỗi như thê này nữa rồi :D
View attachment 236255
Bị lỗi vậy là không có kết quả nào thõa mãn đó bạn, tôi chỉnh lại chỗ này , để báo luôn, bạn nhận lại file. Chỉnh vùng excel cũng được nhưng sửa lại thêm inputbox, bẫy lỗi này kia nữa nên tôi cũng hơi làm biếng :D
 

File đính kèm

Bị lỗi vậy là không có kết quả nào thõa mãn đó bạn, tôi chỉnh lại chỗ này , để báo luôn, bạn nhận lại file. Chỉnh vùng excel cũng được nhưng sửa lại thêm inputbox, bẫy lỗi này kia nữa nên tôi cũng hơi làm biếng :D
Cảm ơn bạn, file này thị lại thiếu trường hợp c=0 thì phải.
Mình có nhập thử giá trị L=3600 thì không có trường hợp c=0 xuất hiện trong khi file trước đó thì có :D
 
Cảm ơn bạn, file này thị lại thiếu trường hợp c=0 thì phải.
Mình có nhập thử giá trị L=3600 thì không có trường hợp c=0 xuất hiện trong khi file trước đó thì có :D
b=0 chứ nhỉ, bạn có sửa điều kiện lại của c không, nếu c=(600,800) thì không có , c=(600,900) thì có
1587610570527.png
 

Bài viết mới nhất

Back
Top Bottom