Loading...
Saraalkadi avatar Saraalkadi 28 Точки

Задача 3. Алуминиева дограма


Задача 3. Алуминиева дограма - защо дава 54/100 в Judge?

 

Изпит по "Основи на програмирането"

Задача 3. Алуминиева дограма

Фирма-производител на алуминиева дограма приема поръчки за изработката и монтаж със следния ценоразпис за един брой. Фирмата приема само поръчки на едро (над 10 бр.). В зависимост от поръчания брой дограми, фирмата прави различна отстъпка на своите клиенти.
Фирмата предлага също и доставка на поръчките си срещу 60 лв.

Размер

Единична цена

Отстъпка от цената

90X130

110 лв.

 Над 30 броя – 5%
 Над 60 броя – 8%

100X150

140 лв.

 Над 40 броя – 6%

   Над 80 броя – 10%

130X180

190 лв.

 Над 20 броя – 7%
   Над 50 броя – 12%

200X300

250 лв.

 Над 25 броя – 9%

   Над 50 броя – 14%

 

 

 

 

 

 

 

Ако поръчката надвишава 99 броя  върху крайната цена се начисляват допълнителни 4% отстъпка (след като се начисли цената за доставка, ако има такава).
При поръчка под 10 бр. на конзолата да бъде изписано

Вход:

Потребителят въвежда 3 реда:

  1. Брой дограми цяло число в интервала [0..1000];
  2. Вид на дограмите текст "90X130" или "100X150" или "130X180" или "200X300";
  3. Начин на получаване текст
    • С доставка - "With delivery"
    • Без доставка - "Without delivery"

Изход:

Извежда се едно число – стойността на поръчката, в следния формат:

  • "{Обща стойност на поръчката} BGN"

Резултатът да се форматира до втори знак след десетичната запетая.

Примерен вход и изход:

Вход

Изход

Обяснения

40

90X130

Without delivery

4180.00 BGN

 

Цената е: 40 бр. * 110 лв. = 4400.00 BGN
Над 30 броя – 5% отстъпка. 4400 – 5% = 4180.00 BGN

Without delivery -> не се начислява нищо допълнително.

105

100X150

With delivery

12758.40 BGN

Цената е: 105 бр. * 140 лв. = 14700.00 BGN
Над 80 броя – 10% отстъпка. 13230.00 BGN

With delivery - 13230.00 + 60.00 = 13290.00 BGN
Над 100 броя – 4% отстъпка след доставката = 12758.40 BGN

 

2

130X180

With delivery

Invalid order

Поръчката е под 10 броя.

 

 

JavaScript - Примерен вход и изход:

Вход

Изход

Обяснения

(["40",

"90X130",

"Without delivery"])

4180.00 BGN

 

Цената е: 40 бр. * 110 лв. = 4400.00 BGN
Над 30 броя – 5% отстъпка. 4400 – 5% = 4180.00 BGN

Without delivery -> не се начислява нищо допълнително.

(["105",

"100X150",

"With delivery"])

12758.40 BGN

Цената е: 105 бр. * 140 лв. = 14700.00 BGN
Над 80 броя – 10% отстъпка. 13230.00 BGN

With delivery - 13230.00 + 60.00 = 13290.00 BGN
Над 100 броя – 4% отстъпка след доставката = 12758.40 BGN

 

(["2",

"130X180",

"With delivery"])

Invalid order

Поръчката е под 10 броя.

 

 

Ето и моето решение:

function aluminumJoinery(input) {

 

    let joineryCount = Number(input[0]);

    let joineryType = input[1];

    let delivery = input[2];

 

    let joineryPrice = 0;

    let totalPrice = 0;

    let priceAfterDiscount = 0;

 

    if (joineryCount <= 10) {

        console.log("Invalid order");

 

    } else if (joineryCount > 10) {

        switch (joineryType) {

 

            case "90X130":

                joineryPrice = 110;

                totalPrice = joineryCount * joineryPrice;

 

                if (joineryCount > 30) {

                    priceAfterDiscount = totalPrice * 0.95;

                } else if (joineryCount > 60) {

                    priceAfterDiscount = totalPrice * 0.92;

                } else {

                    priceAfterDiscount = totalPrice;

                }

 

                break;

 

            case "100X150":

                joineryPrice = 140;

                totalPrice = joineryCount * joineryPrice;

 

                if (joineryCount > 40) {

                    priceAfterDiscount = totalPrice * 0.94;

                } else if (joineryCount > 80) {

                    priceAfterDiscount = totalPrice * 0.90;

                } else {

                    priceAfterDiscount = totalPrice;

                }

 

                break;

 

            case "130X180":

                joineryPrice = 190;

                totalPrice = joineryCount * joineryPrice;

 

                if (joineryCount > 20) {

                    priceAfterDiscount = totalPrice * 0.93;

                } else if (joineryCount > 50) {

                    priceAfterDiscount = totalPrice * 0.88;

                } else {

                    priceAfterDiscount = totalPrice;

                }

 

                break;

 

            case "200X300":

                joineryPrice = 250;

                totalPrice = joineryCount * joineryPrice;

 

                if (joineryCount > 25) {

                    priceAfterDiscount = totalPrice * 0.91;

                } else if (joineryCount > 50) {

                    priceAfterDiscount = totalPrice * 0.86;

                } else {

                    priceAfterDiscount = totalPrice;

                }

 

                break;

        }

 

        if (delivery === "With delivery") {

            priceAfterDiscount += 60;

        }

 

        if (joineryCount > 99) {

            priceAfterDiscount *= 0.96;

        }

 

        console.log(`${priceAfterDiscount.toFixed(2)} BGN`);

    }

}

aluminumJoinery(["40", "90X130", "Without delivery"])

Тагове:
0
Programming Basics
MartinBG avatar MartinBG 4803 Точки
Best Answer

Виждам следните проблеми:

1. Невалидни са поръчки под 10 броя, т.е. if (joineryCount <= 10) трябва да е if (joineryCount < 10) 

2. Всички if/else if/else проверки отстъпки за количество са с грешна последователност и никога не се достига до втората по големина отстъпка. Например:

                if (joineryCount > 30) { //това е валидно и за joineryCount, равен на 61
                    priceAfterDiscount = totalPrice * 0.95;
                } else if (joineryCount > 60) { // никога не се прилага, защото всеки joineryCount > 60 е и по-голям от 30
                    priceAfterDiscount = totalPrice * 0.92;
                } else { //
                    priceAfterDiscount = totalPrice;
                }

За да рaботи коректно, проверката за joineryCount трябва да от най-голямата към най-малката, например:

                if (joineryCount > 60) { // 60+
                    priceAfterDiscount = totalPrice * 0.92;

                } else if (joineryCount > 30) { // 31-60
                    priceAfterDiscount = totalPrice * 0.95;

                } else { // <=30
                    priceAfterDiscount = totalPrice;

                }

 

0
07/05/2022 21:35:17
Saraalkadi avatar Saraalkadi 28 Точки

Много благодаря :)

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.