Lý lịch
Ở Pháp, và có lẽ trong phần còn lại của Liên minh châu Âu, bất kỳ thực phẩm nào được bán phải liệt kê các thành phần cấu thành nó trên bao bì của nó, theo thứ tự tỷ lệ phần trăm giảm dần . Tuy nhiên, tỷ lệ chính xác không cần phải được chỉ định, trừ khi thành phần được tô sáng bằng văn bản hoặc hình ảnh trên trang bìa.
Ví dụ, sốt cà chua húng quế của tôi, chỉ hiển thị một số cà chua lớn màu đỏ và lá húng quế đẹp trên bao bì của nó, có các chỉ dẫn sau:
Thành phần: Cà chua 80%, hành tây thái miếng, húng quế 1,4%, muối biển, tỏi nghiền, đường mía thô, dầu ô liu nguyên chất, hạt tiêu đen.
Nghe có vẻ ngon, nhưng chính xác thì tôi sẽ ăn bao nhiêu hành tây ?
Thử thách
Đưa ra một danh sách tỷ lệ phần trăm trọng lượng theo thứ tự giảm dần, cuối cùng không đầy đủ, đưa ra một danh sách đầy đủ các tỷ lệ phần trăm tối thiểu và tối đa có thể tìm thấy trong công thức.
- Bạn có thể viết một hàm hoặc một chương trình đầy đủ.
- Đầu vào có thể ở bất kỳ dạng hợp lý nào (ví dụ, mảng số hoặc danh sách các chuỗi). Các giá trị phân số phải được hỗ trợ ít nhất đến một vị trí thập phân. Một tỷ lệ phần trăm thiếu có thể được biểu diễn theo bất kỳ cách nhất quán và rõ ràng nào ( ví dụ
0
,'?'
hoặcnull
, chẳng hạn). Bạn có thể giả định rằng đầu vào sẽ luôn được liên kết với một công thức hợp lệ ( chẳng hạn,[70]
và[∅, ∅, 50]
không hợp lệ). - Đầu ra có thể ở bất kỳ dạng hợp lý nào (ví dụ, một mảng cho cả hai tỷ lệ phần trăm trọng lượng tối thiểu và tối đa, hoặc một danh sách các bộ đôi, chẳng hạn). Tỷ lệ tối thiểu và tối đa có thể theo bất kỳ thứ tự nào (
[min, max]
và[max, min]
cả hai đều được chấp nhận). Tỷ lệ phần trăm chính xác không cần phải được xử lý khác với tỷ lệ phần trăm khác và có thể được biểu thị bằng các giá trị tối thiểu và tối đa bằng nhau.
Áp dụng quy tắc chuẩn cho môn đánh gôn : trong khi bạn đang nhập mã của mình, món mì ống của tôi đang nguội dần, vì vậy bài nộp ngắn nhất sẽ thắng.
Ví dụ
Vì vấn đề này khó hơn so với cái nhìn đầu tiên, đây là cách giải quyết từng bước của một vài trường hợp.
[40, ∅, ∅]
Hãy gọi tương ứng x
và y
hai phần trăm bị thiếu.
- Bởi vì nó xuất hiện sau thành phần đầu tiên ở mức 40%,
x
không thể cao hơn 40%.[40, [?, 40], [?, ?]]
- Tổng của hai tỷ lệ phần trăm còn thiếu luôn là 60%. Hậu quả là :
- Nếu
x
lấy giá trị tối đa của nó , thìy
lấy giá trị tối thiểu của nó , do đó là 60% - 40% = 20%.[40, [?, 40], [20, ?]]
- Nếu
x
lấy giá trị tối thiểu của nó , thìy
lấy giá trị tối đa của nó . Nhưngx
không thể thấp hơny
, vì vậy trong trường hợp này,x
=y
= 60% / 2 = 30%.[40, [30, 40], [20, 30]]
- Nếu
[70, ∅, ∅, 5, ∅]
Chúng ta hãy gọi tương ứng x
, y
và z
ba phần trăm bị thiếu.
- Tỷ lệ phần trăm tối thiểu và tối đa cho
z
nhất thiết phải nằm trong khoảng từ 0% đến 5%. Giả sửz
= 0% trong giây lát. Tổng của hai tỷ lệ phần trăm còn thiếu luôn là 25%. Hậu quả là :[70, [?, ?], [?, ?], 5, [0, 5]]
- Nếu
y
lấy giá trị tối thiểu của nó , 5%, sau đóx
lấy giá trị tối đa của nó , do đó là 25% - 5% = 20%.[70, [?, 20], [5, ?], 5, [0, 5]]
- Nếu
y
lấy giá trị tối đa của nó , thìx
lấy giá trị tối thiểu của nó . Nhưngx
không thể thấp hơny
, vì vậy trong trường hợp này,x
=y
= 25% / 2 = 12,5%.[70, [12.5, 20], [5, 12.5], 5, [0, 5]]
- Nếu
- Hãy xác minh rằng mọi thứ đều ổn nếu chúng ta giả sử bây giờ
z
= 5%. Tổng của hai phần trăm còn thiếu luôn là 20%. Hậu quả là :- Nếu
y
lấy giá trị tối thiểu của nó , 5%, sau đóx
lấy giá trị tối đa của nó , do đó là 20% - 5% = 15%. Trường hợp này đã được bao gồm trong phạm vi tính toán trước đó. - Nếu
y
lấy giá trị tối đa của nó , thìx
lấy giá trị tối thiểu của nó . Nhưngx
không thể thấp hơny
, vì vậy trong trường hợp này,x
=y
= 20% / 2 = 10%. Trường hợp này đã được bao gồm trong phạm vi tính toán trước đóy
, nhưng không phải chox
.[70, [10, 20], [5, 12.5], 5, [0, 5]]
- Nếu
Các trường hợp thử nghiệm
Input: [∅]
Output: [100]
Input: [70, 30]
Output: [70, 30]
Input: [70, ∅, ∅]
Output: [70, [15, 30], [0, 15]]
Input: [40, ∅, ∅]
Output: [40, [30, 40], [20, 30]]
Input: [∅, ∅, 10]
Output: [[45, 80], [10, 45], 10]
Input: [70, ∅, ∅, ∅]
Output: [70, [10, 30], [0, 15], [0, 10]]
Input: [70, ∅, ∅, 5, ∅]
Output: [70, [10, 20], [5, 12.5], 5, [0, 5]]
Input: [30, ∅, ∅, ∅, 10, ∅, ∅, 5, ∅, ∅]
Output: [30, [10, 25], [10, 17.5], [10, 15], 10, [5, 10], [5, 10], 5, [0, 5], [0, 5]]
[40, ∅, ∅]
và [70, ∅, ∅, 5, ∅]
để làm cho mọi thứ rõ ràng hơn một chút. Một thách thức nên rõ ràng mà không cần nhìn vào các trường hợp thử nghiệm, đó không phải là trường hợp ngay bây giờ. Nếu tôi hiểu chính xác cho [40, ∅, ∅]
: 60 nhiều hơn là cần thiết cho 100%, chia cho hai ∅
. Cái đầu tiên ∅
phải từ 30 trở lên (nếu không cái thứ hai ∅
sẽ ở trên nó, điều này không thể thực hiện được khi chúng theo thứ tự). Ngoài ra, nó không thể ở trên 40
, vì vậy cái đầu tiên ∅
trở thành [30,40]
, và cái thứ hai trở thành [(100-40-40=)20, (100-40-30=)30]
.
[min,max]
/ [max,min]
hoặc cho phép hỗn hợp?
[min,max]
và [max,min]
là đường biên chấp nhận được, nhưng vì nó không thể dẫn đến kết quả mơ hồ, tôi nói rằng nó ổn.
[70, 12, 11, 5, 2]
không hoạt động cho ví dụ thứ hai của bạn? Nếu nó hoạt động, tối thiểu cho x
sẽ ít hơn 12.5
.