Как можно установить систему скидок, при которой на второй товар будет действовать скидка 20%, на третий - 30% и так далее?

Какую формулу следует использовать для расчета скидок на группу товаров, если на 2 самый дешевый товар предоставляется скидка 20%, на 3 – 30%, на 4 – 40%, а на 5 и более товаров – 50%? Приведите конкретные примеры расчетов на основании следующей информации: 
- Для двух товаров стоимостью 100 рублей каждый: один стоит 100 рублей, второй – 80 рублей. 
- Для трех товаров стоимостью 100 рублей каждый: первый товар – 100 рублей, второй – 80 рублей, третий – 70 рублей. 
- Для шести товаров стоимостью 100 рублей каждый: первый товар – 100 рублей, второй – 80 рублей, третий – 70 рублей, четвертый – 60 рублей, пятый и шестой – по 50 рублей.
  • 5 декабря 2024 г. 8:13
Ответы на вопрос 2
Чтобы установить систему скидок и рассчитать общую стоимость товаров с учетом скидок, необходимо учитывать, сколько товаров в группе и какую скидку применить к каждому последующему товару. 

### Общая формула для расчета скидки

1. **Сортировка товаров по стоимости:** Сначала отсортируйте товары по цене от наименьшей к наибольшей.
2. **Применение скидок:** Скидка на товары будет применяться следующим образом:
   - Для 2-го товара: скидка 20%
   - Для 3-го товара: скидка 30%
   - Для 4-го товара: скидка 40%
   - Для 5-го товара и более: скидка 50%

### Формула для расчета цены с учетом скидки:

1. Если у вас есть `n` товаров, отсортированных по возрастанию цен, то итоговая сумма с учетом скидок считается так:
   \[
   \text{Итоговая цена} = p_1 + p_2 \times 0.8 + p_3 \times 0.7 + p_4 \times 0.6 + p_5 \times 0.5 + (p_6 \times 0.5) + ...
   \]
   где \( p_i \) - цена i-го по стоимости товара.

### Примеры расчетов

#### Пример 1: Два товара по 100 рублей и 80 рублей

- Сортировка: 80 рублей, 100 рублей.
- Скидки:
  - 1-й товар: 80 рублей
  - 2-й товар (20% скидка): \( 100 \times 0.8 = 80 \) рублей.
  
Итоговая цена: \( 80 + 80 = 160 \) рублей.

#### Пример 2: Три товара по 100 рублей, 80 рублей и 70 рублей

- Сортировка: 70 рублей, 80 рублей, 100 рублей.
- Скидки:
  - 1-й товар: 70 рублей
  - 2-й товар (20% скидка): \( 80 \times 0.8 = 64 \) рубля.
  - 3-й товар (30% скидка): \( 100 \times 0.7 = 70 \) рублей.

Итоговая цена: \( 70 + 64 + 70 = 204 \) рубля.

#### Пример 3: Шесть товаров по 100 рублей, 80 рублей, 70 рублей, 60 рублей, 50 рублей, 50 рублей

- Сортировка: 50 рублей, 50 рублей, 60 рублей, 70 рублей, 80 рублей, 100 рублей.
- Скидки:
  - 1-й товар: 50 рублей
  - 2-й товар: 50 рублей (20% скидка на второй, поэтому: \( 50 \times 0.8 = 40 \) рублей).
  - 3-й товар (30% скидка): \( 60 \times 0.7 = 42 \) рубля.
  - 4-й товар (40% скидка): \( 70 \times 0.6 = 42 \) рубля.
  - 5-й товар (50% скидка): \( 80 \times 0.5 = 40 \) рублей.
  - 6-й товар (50% скидка): \( 100 \times 0.5 = 50 \) рублей.

Итоговая цена: 
\[
50 + 40 + 42 + 42 + 40 + 50 = 264 \text{ рубля.}
\]

Таким образом, итоговые цены с учетом скидок составляют:
- Для двух товаров: 160 рублей.
- Для трех товаров: 204 рубля.
- Для шести товаров: 264 рубля.
Никак. Невозможно организовать штатными средствами скидку которая будет "сравнивать" товары. 

Вот что можно сделать (точнее как делаю я):
1 Вам нужен скрипт-разметчик товаров в корзине.
Повесьте на события OnBasketUpdate, OnBasketDelete и OnBasketAdd функцию которая будет получать доступ к текущий корзине, пробегать по ней и добавлять пунктам корзины свойство-маркер с каким-либо условным значением. В самом простом случае добавлять самому дешевому товара свойство с кодом CHEAP и значением 1. Товару который второй по "дешевости" с кодом CHEAP и значением 2 и так далее.

2 создайте правило корзины которое добавляет скидку основываясь но свойствах товара в корзине, типа "Если свойство товара в корзине с кодом CHEAP равно 1" и так далее.

Вот с какими проблемами вы в частности при этом столкнетесь - что делать, если в корзине 2 товара. Один стоимостью 1000 рублей, и в количестве 1 штука, а второй стоимостью 500 рублей, в количестве 2 штуки. Вам тут надо будет дать скидку на второй товар, но только на одну штуку. Для этого придется использовать деление корзины.

Вот этот код вам возможно поможет: https://pastebin.com/Kjbi9zs6 - он не очень хорош, но все же лучше чем ничего.
Похожие вопросы