Tìm số viên bi trong hộp

Trong 1 chiếc hộp đựng 10 viên bi xanh, 10 viên bi đỏ và 10 viên bi vàng. Em hãy cho biết có bao nhiêu cách lấy ra 20 viên bi có đủ 3 màu xanh, đỏ, vàng, trong đó có ít nhất 3 viên bi màu xanh và nhiều nhất 7 viên bi màu đỏ.
Bài này hơi khóm các bạn giúp e vs ạ :frowning:

Mình dốt xác suất nhất, giải để mọi người chỉ ra cái sai thôi. Ý tưởng là làm phần bù. Ở đây ta sẽ có những trường hợp không thỏa mãn đề sẽ là

Ta lấy đủ cả 3 màu nhưng

  • 1 viên xanh
  • 2 viên xanh
  • 8 viên đỏ
  • 9 viên đỏ
  • 10 viên đỏ

Ta có 30C20 cách để chọn ra 20 viên trong 30 viên. Đây là phần tổng, tí ta lấy trừ cho phần bù ta tính được

Ở trường hợp 1 viên xanh, ta cần chọn thêm 19 viên từ 20 viên 2 màu, dĩ nhiên đã chọn 19 viên thì kiểu gì cũng sẽ phải có 2 màu, nên ta có: 10C1x20C19
Trường hợp 2 viên xanh ta làm tương tự: 10C2x20C18
Trường hợp 8 viên đỏ cũng thế: 10C8x20C12
Trường hợp 9 viên đỏ: 10C9x20C11
Trường hợp 10 viên đỏ thì sẽ có chút khác. Khi đã chọn 10 viên đỏ rồi, thì ta phải chọn 10 viên còn lại trong 20 viên, dĩ nhiên sẽ có trường hợp chỉ có 1 màu và ta dễ dàng thấy chỉ có 2 trường hợp lựa 10 viên trong 20 viên mà chỉ có 1 màu là 10 viên xanh hoặc 10 viên vàng. Vậy nên cách lựa để chọn ra 10 viên trong 20 mà có đủ 2 màu sẽ là (20C10 - 2) và đây cũng là cách chọn 10 viên đỏ và 10 viên còn lại gồm đủ cả 2 màu vì cách chọn 10 viên đỏ chỉ có 1.

Ta lấy chỉ có 2 màu
Cái này thì không có gì khó khăn ta dễ tính được là 3C2 = 3

Ta chỉ lấy 1 màu
Trường hợp này không thể xảy ra nên là 0

Vậy kết quả cần tính là
30C20 - (10C1x20C19 + 10C2x20C18 + 10C8x20C12 + 10C9x20C11 + (20C10 - 2)) - 3C2 - 0 = 22503258

4 Likes

Gọi x là số viên bi xanh, y là số viên bi vàng và z là số viên bi đỏ. Tổng số viên bi được lấy là: x + y + z

Theo đề bài:

  • 3 ≤ x ≤ 10, 1 ≤ y ≤ 10, 1 ≤ z ≤ 7
  • x + y + z = 20

Đặt a = x - 3, b = y - 1, c = z - 1. Hệ bất phương trình trên tương đương:

  • 0 ≤ a ≤ 7 (1)
  • 0 ≤ b ≤ 9 (2)
  • 0 ≤ c ≤ 6 (3)
  • a + b + c = 15 (4)

Xét trường hợp c = 0, (4) trở thành:

  • a + b = 15
  • b = 15 - a (5)

Từ điều kiện (1) và phương trình (5), giá trị của b nằm ở khoảng: 8 ≤ b ≤ 15 (6)
Kết hợp (6) với (2), suy ra 8 ≤ b ≤ 9.
Vì vậy, với c = 0 thì có 2 giá trị b thoả mãn điều kiện đề bài.

Tương tự:
c = 1 => 7 ≤ b ≤ 9, có 3 giá trị b.
c = 2 => 6 ≤ b ≤ 9, có 4 giá trị b.
c = 3 => 5 ≤ b ≤ 9, có 5 giá trị b.
c = 4 => 4 ≤ b ≤ 9, có 6 giá trị b.
c = 5 => 3 ≤ b ≤ 9, có 7 giá trị b.
c = 6 => 2 ≤ b ≤ 9, có 8 giá trị b.


Tổng số cách: 2 + 3 + 4 + 5 + 6 + 7 + 8 = (1 + 2 + … + 8) - 1 = 8.9/2 - 1 = 36 - 1 = 35.

3 Likes

Cách hình học

Bổ đề:
Xét các tam giác “chấm” có dạng như hình dưới:

. .     . . .     . . . .
  .       . .       . . .
            .         . .
                        .

(I)      (II)       (III)

Tổng số chấm trong tam giác và số chấm trên cạnh góc vuông:

Tam giác Số chấm trên cạnh góc vuông Tổng số chấm
(I) 2 3
(II) 3 6
(III) 4 10

Nếu thiết lập hàm số T, với biến độc lập là “số chấm trên cạnh góc vuông”, biến phụ thuộc là “tổng số chấm”, thì T là hàm số từ tập N -> N:

  • T(2) = 3, T(3) = 6, T(4) = 10.

Nhận xét thấy T(n) có công thức: (tạm thời bỏ qua chứng minh mà chấp nhận)

  • T(n) = 1 + 2 + … + n
  • T(n) = n(n+1) / 2

Đối với bài toán, cũng lập luận như trên ra được hệ phương trình:

  • 0 ≤ a ≤ 7, 0 ≤ b ≤ 9 (1)
  • 0 ≤ c ≤ 6 (2)
  • a + b + c = 15 (3)

Thế lần lượt các giá trị c từ 0 tới 6 (theo (2)) vào phương trình (3), được 1 tập hợp các phương trình đường thẳng trên hệ toạ độ Oab, giới hạn bởi 2 phương trình:

  • a + b = 15
  • a + b = 9

Vẽ lần lượt các đường thẳng a = 0, a = 7, b = 0, b = 9, a + b = 9, a + b = 15.
Các đường thẳng tạo 1 tứ giác nội tiếp ABCD, trong đó A(0,9), B(6,9), C(7,8) và D(7,2).

   b
   ^
   |           B  E
 A . . . . . . . +
 8 | . . . . . . . C
 7 |   . . . . . .
 6 |     . . . . . 
 5 |       . . . .
 4 |         . . .
 3 |           . .
 2 |             .
 1 |             D
 0 + - - - - - - - -> a
   0 1 2 3 4 5 6 7

Để tiện tính toán, thêm điểm E(7,9), số chấm trong ABCD = (số chấm trong tam giác EAD) - 1

Trong tam giác EAD:

  • cạnh EA có độ dài bằng hiệu hoành độ: 7 - 0 = 7, số chấm trên cạnh = 7 + 1 = 8.
  • cạnh ED có độ dài bằng hiệu tung độ: 9 - 2 = 7, số chấm trên cạnh = 7 + 1 = 8.

Tam giác EAD vuông cân tại E (vì EA = ED). Số chấm của EAD = T(8) = 8.9 / 2 = 36
Số chấm ABCD = 36 - 1 = 35.

3 Likes

Lớp 5 giờ học khủng vậy trời @@, m nhớ bài này dạng lớp 12 phần xác suất mà nhỉ

2 Likes

Cách đó là liệt kê, chỉ phù hợp với kết quả nhỏ.
Mà toán tổ hợp mà chơi liệt kê thì còn gì là toán tổ hợp nữa.
Phần chỉnh sửa của mình ở trên là chuyến từ phương pháp liệt kê sang đếm, “có học” hơn tí.

Sao kết quả trang hocmai khác vậy ta. :thinking:

2 Likes

Tại đề hỏi là “Em hãy cho biêt” nên thấy nghi nghi, cấp 2 là Phải Anh/ chị rồi
Chuẩn 35 rồi bác

4 Likes

Cách này là cho 20 viên họa tiết khác nhau :smiley: chứ còn đồng màu thì nó thành ra bài số nghiệm phương trình.

Brute force thì cho máy thôi. Bên HM thì câu đầu đúng nhưng sau đó lại đi cố định 10 viên bi vàng :smiley:

1 Like
from itertools import combinations

hộp_bi = 'X' * 10 + 'Đ' * 10 + 'V' * 10

i = 0
số_cách = 0
for hai_mươi_viên_bi in combinations(hộp_bi, 20):
    số_bi_xanh = hai_mươi_viên_bi.count('X')
    số_bi_đỏ = hai_mươi_viên_bi.count('Đ')
    số_bi_vàng = hai_mươi_viên_bi.count('V')
    if số_bi_xanh >= 3 and 0 < số_bi_đỏ <= 7 and số_bi_vàng > 0:
        số_cách += 1

print(số_cách)

22512008

:rofl:

2 Likes

cái này phải cộng thêm lại mấy trường hợp có 1 xanh 8 đỏ, 1 xanh 9 đỏ, 1 xanh 10 đỏ, 2 xanh 8 đỏ, v.v…

edit: code dài hơn cái :joy:

from itertools import combinations
from collections import defaultdict
from pprint import pprint

hộp_bi = 'X' * 10 + 'Đ' * 10 + 'V' * 10

số_cách_không_phân_biệt_bi_cùng_màu = defaultdict(int)
for hai_mươi_viên_bi in combinations(hộp_bi, 20):
    số_bi_xanh = hai_mươi_viên_bi.count('X')
    số_bi_đỏ = hai_mươi_viên_bi.count('Đ')
    số_bi_vàng = hai_mươi_viên_bi.count('V')
    if số_bi_xanh >= 3 and 0 < số_bi_đỏ <= 7 and số_bi_vàng > 0:
        hai_mươi_viên_bi_đã_sắp_xếp = ''.join(sorted(hai_mươi_viên_bi))
        số_cách_không_phân_biệt_bi_cùng_màu[hai_mươi_viên_bi_đã_sắp_xếp] += 1

print(len(số_cách_không_phân_biệt_bi_cùng_màu))
số_cách = sum(v for k, v in số_cách_không_phân_biệt_bi_cùng_màu.items())
print(số_cách)
pprint(số_cách_không_phân_biệt_bi_cùng_màu)

in ra :V

35
22512008
defaultdict(<class 'int'>,
            {'VVVVVVVVVVXXXXXXXXXĐ': 100,
             'VVVVVVVVVVXXXXXXXXĐĐ': 2025,
             'VVVVVVVVVVXXXXXXXĐĐĐ': 14400,
             'VVVVVVVVVVXXXXXXĐĐĐĐ': 44100,
             'VVVVVVVVVVXXXXXĐĐĐĐĐ': 63504,
             'VVVVVVVVVVXXXXĐĐĐĐĐĐ': 44100,
             'VVVVVVVVVVXXXĐĐĐĐĐĐĐ': 14400,
             'VVVVVVVVVXXXXXXXXXXĐ': 100,
             'VVVVVVVVVXXXXXXXXXĐĐ': 4500,
             'VVVVVVVVVXXXXXXXXĐĐĐ': 54000,
             'VVVVVVVVVXXXXXXXĐĐĐĐ': 252000,
             'VVVVVVVVVXXXXXXĐĐĐĐĐ': 529200,
             'VVVVVVVVVXXXXXĐĐĐĐĐĐ': 529200,
             'VVVVVVVVVXXXXĐĐĐĐĐĐĐ': 252000,
             'VVVVVVVVXXXXXXXXXXĐĐ': 2025,
             'VVVVVVVVXXXXXXXXXĐĐĐ': 54000,
             'VVVVVVVVXXXXXXXXĐĐĐĐ': 425250,
             'VVVVVVVVXXXXXXXĐĐĐĐĐ': 1360800,
             'VVVVVVVVXXXXXXĐĐĐĐĐĐ': 1984500,
             'VVVVVVVVXXXXXĐĐĐĐĐĐĐ': 1360800,
             'VVVVVVVXXXXXXXXXXĐĐĐ': 14400,
             'VVVVVVVXXXXXXXXXĐĐĐĐ': 252000,
             'VVVVVVVXXXXXXXXĐĐĐĐĐ': 1360800,
             'VVVVVVVXXXXXXXĐĐĐĐĐĐ': 3024000,
             'VVVVVVVXXXXXXĐĐĐĐĐĐĐ': 3024000,
             'VVVVVVXXXXXXXXXXĐĐĐĐ': 44100,
             'VVVVVVXXXXXXXXXĐĐĐĐĐ': 529200,
             'VVVVVVXXXXXXXXĐĐĐĐĐĐ': 1984500,
             'VVVVVVXXXXXXXĐĐĐĐĐĐĐ': 3024000,
             'VVVVVXXXXXXXXXXĐĐĐĐĐ': 63504,
             'VVVVVXXXXXXXXXĐĐĐĐĐĐ': 529200,
             'VVVVVXXXXXXXXĐĐĐĐĐĐĐ': 1360800,
             'VVVVXXXXXXXXXXĐĐĐĐĐĐ': 44100,
             'VVVVXXXXXXXXXĐĐĐĐĐĐĐ': 252000,
             'VVVXXXXXXXXXXĐĐĐĐĐĐĐ': 14400})
2 Likes

À rồi, e biết e thừa vài trường hợp rồi :smiley:

2 Likes

cho m hỏi cách làm của scratch vs ạ!

Xin lỗi bạn nhé, mình là người sửa title đầu tiên làm lái luôn cả topic. :disappointed_relieved:
Mình thì không biết Scratch, nhưng biết Python. Bạn chuyển sang Scratch nha.

count = 0

for x in range(3, 10+1):
  for y in range(1, 10+1):
    for z in range(1, 6+1):
      if x+y+z == 20:
        count += 1

print(count)
print(len([ (x,y)
  for x in range(3, 10+1) for y in range(1, 10+1)
  if 20-x-y > 0 and 20-x-y <= 10 ]))
2 Likes

tại sao phải làm với Scratch :V

2 Likes

xài Geogebra vẽ hình rồi đếm mấy điểm :dizzy_face:

image

đáp án 35 :V

3 Likes

bởi vì l5 chỉ có scratch thôi ạ :smiley:

đọc cái Scratch chả hiểu gì :V lớp 5 là học giải pt bậc 2 rồi chỉ nó vẽ hình mấy cái điều kiện rồi đếm số điểm có tọa độ nguyên là được :V

3 Likes

Vậy em học lớp 5?

# ruby-ish
red = 0
count = 0
7.times do # scratch không có for :D
   red += 1
   green = 2
  (10-3+1).times do
     green += 1
     if red + green >= 10 then count += 1 end
   end
end

say count # aka p count
2 Likes

In ra đáp số chắc phù hợp cho mọi lứa tuổi nhỉ? :kissing:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?