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

Изпитни задачи с вложени цикли

Здравейте, затруднявам се в решаването на тези две изпитни задачи, включващи в себе си вложени цикли, ще се радвам някой да сподели решения на JavaScript:

https://judge.softuni.org/Contests/Practice/Index/1745#8
https://judge.softuni.org/Contests/Practice/Index/1637#11

Изпит по "Основи на програмирането" – 6 и 7 юли 2019

Задача 6. Игра на имена

Иван е измислил нова игра в която да се състезава със своите приятели. Вашата задача е да напишете програма за играта. Всеки играч написва името си, след това за всяка една буква от името си написва по едно цяло число, ако числото съвпада с ASCII стойността на съответната буква, играчът получава 10 точки, в противен случай, получава само 2 точки. Победител е играчът с най-много точки в края на играта. В случай, че двама играчи имат равен брой точки, печели този, който втори е достигнал резултата.

Вход

До получаване на командата "Stop" се чете по един ред:

  • Име на играча с дължина n - текст

За всеки играч се четат n на брой реда:

  • число – цяло число в интервала[0…127]

Изход

Да се отпечата един ред в следния формат:

  • "The winner is {името на победителя} with {точките на победителя} points!"

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

Вход

Изход

Обяснения

Ivan

73

20

98

110

Ivo

80

65

87

Stop

The winner is Ivan with 24 points!

Първият играч е Ivan, дължината на името му е 4 символа, Затова прочитаме 4 числа. Първото число е 73,  ASCII стойността на символа 'I'  също е 73, следователно получава 10 точки, след това прочитаме 20, но стойността на 'v' е 118, получава 2 точки. След това прочитаме 98, но стойността на 'a' е 97, получава 2 точки. Последно прочитаме 110, стойността на 'n' също е 110 и затова получава 10 точки, Общо 10 + 2 + 2 + 10 = 24.

Вторият играч е Ivo, прочитаме 3 числа, и трите числа са различни от съответните букви на името, затова Иво получава само 6 точки.

Получаваме командата Stop, печеливш играч е Ivan

Вход

Изход

Обяснения

Pesho

124

34

111

97

99

Gosho

98

124

88

76

18

Stop

The winner is Gosho with 10 points!

Първият играч е Pesho, дължината на името е 5.

Прочитаме 5 числа. Нито едно от тях не съответства на конкретната буква, следователно получава 5 пъти по 2 точки, общо 10 и към момента той има най-много.

Вторият играч е Gosho, дължината на името е 5.

Прочитаме 5 числа и отново нито едно от тях не съответства на съответните букви, съответно получава 5 пъти по 2 точки, общо 10.

И двамата играчи имат равен брой точки (10), съответно на първо място остава вторият играч Gosho.

Получаваме командата Stop, печеливш играч е Gosho

 

 

 

 

 

Изпит по "Основи на програмирането" - 20 и 21 Април 2019

Задача 6. Великденска украса

За великденските празници, магазин започва да продава три вида великденска украса – кошнички за яйца (basket), великденски венци (wreath) и шоколадови зайци (chocolate bunny). Вашата задача е да напишете програма, която да изчислява каква сметка трябва да плати всеки един клиент на магазина, като се има в предвид, че всеки клиент закупил четен брой продукти, ще получи 20% отстъпка от крайната цена. След като всички клиенти приключат с покупките, трябва да се отпечата средно по колко пари е похарчил всеки човек.

Цените на продуктите са:

  • кошничка за яйца (basket) – 1.50 лв.
  • великденски венец (wreath) – 3.80 лв.
  • шоколадов заек (chocolate bunny) – 7 лв.

Вход

От конзолата първоначално се чете един ред:

  • Брои на клиентите в магазина – цяло число [1… 100]
  • След това за всеки един клиент на нов ред до получаване на командата "Finish" се чете:
    • Покупката която клиента е избрал – текст ("basket", "wreath" или "chocolate bunny")

Изход

  • При получаване на командата "Finish" да се отпечата един ред:
    • "You purchased {броя на покупките} items for {крайната цена} leva."
  • Накрая, след като всички клиенти приключат с покупките, да се отпечата на един ред
    • "Average bill per client is: {средно аритметично на парите които е похарчил всеки един клиент} leva."

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

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

Вход

Изход

Обяснения

2

basket

wreath

chocolate bunny

Finish

wreath

chocolate bunny

Finish

You purchased 3 items for 12.30 leva.

You purchased 2 items for 8.64 leva.

Average bill per client is: 10.47 leva.

В магазина има 2 клиента.

Първият купува 3 артикула -> една кошница за 1.50 лв. един венец за 3.80 лв. и един шоколадов заек за 7 лв.

Неговата сметка е 1.50 + 3.80 + 7 = 12.30 лв.

Вторият клиент купува  2 прадукта
-> един вецен за 3.80 лв и един шоколадов заек за 7 лв.
Цената е 3.80 + 7 = 10.80 лв. но тъй като е закупил четен брой продукти(2), получава 20% отстъпка.

20% от 10.80 е 2.16 лв.

Сметката, която трябва да заплати е 10.80 – 2.16 = 8.64 лв.

Средната цена която двамата клиенти са платили е
(12.30 + 8.64) / 2 = 10.47

1

basket

wreath

chocolate bunny

wreath

basket

chocolate bunny

Finish

You purchased 6 items for 19.68 leva.

Average bill per client is: 19.68 leva.

В магазина има 1 клиент.

Той купува 6 артикула -> 2 кошници по 1.50 лв. 2 венеца по 3.80 лв. и 2 шоколадови заека по 7 лева.

Цената за тях е:
2 * 1.50 + 2 * 3.80 + 2 * 7 = 24.60 лв.

но тъй като е закупил четен брой продукти(6) получава 20% отстъпка.

20% от 24.60 е 4.92 лв.

Сметката която трябва да заплати е 24.60 – 4.92 = 19.68 лв.

Средната цена на клиентите в магазина е 19.68 / 1 = 19.68

 

 

Тагове:
Axiomatik avatar Axiomatik 2422 Точки
Best Answer

NameGame:

function nameGame(input) {
    // Победител е играчът с най-много точки в края на играта.
    const maxWinner = {
        name: '',
        points: 0,
    };

    let currentLine = input.shift();

    while (currentLine !== 'Stop') {
        let currentName = currentLine;
        let length = currentName.length;

        let currentPlayer = {
            name: currentName,
            points: 0,
        };

        for (let i = 0; i < length; i++) {
            const currentNumber = Number(input.shift());
            const currentLetterValue = currentPlayer.name.charCodeAt(i);

            // Всеки играч написва името си, след това за всяка една буква от името си написва 
            // по едно цяло число, ако числото съвпада с ASCII стойността на съответната буква, 
            // играчът получава 10 точки, в противен случай, получава само 2 точки. 
            if (currentNumber === currentLetterValue) {
                currentPlayer.points += 10;
            } else {
                currentPlayer.points += 2;
            }
        }

        // В случай, че двама играчи имат равен брой точки, печели този, който втори е достигнал резултата.
        if (currentPlayer.points >= maxWinner.points) {
            maxWinner.name = currentPlayer.name;
            maxWinner.points = currentPlayer.points;
        }

        currentLine = input.shift();
    }

    console.log(`The winner is ${maxWinner.name} with ${maxWinner.points} points!`);
}

Easter Decoration:

function easterDecoration(input) {
    let index = 0;
    let customers = Number(input[index++]);
    let totalSum = 0;
    let price = 0;
    let sum = 0;

    // три вида великденска украса – кошнички за яйца (basket), великденски венци (wreath)
    // и шоколадови зайци (chocolate bunny). 
    let basketPrice = 1.50;
    let wreathPrice = 3.80;
    let chocolateBunnyPrice = 7;

    for (let i = 1; i <= customers; i++) {
        let basket = 0;
        let chocolateBunny = 0;
        let wreath = 0;
        let totalItems = 0;

        let item = input[index++];

        while (item !== "Finish") {
            if (item === "basket") {
                sum += 1.50;
                basket++;
            } else if (item === "wreath") {
                sum += 3.80
                wreath++;
            } else if (item === "chocolate bunny") {
                sum += 7;
                chocolateBunny++;
            }

            item = input[index++];
        }

        totalItems = basket + wreath + chocolateBunny;

        price = basket * basketPrice + wreath * wreathPrice + chocolateBunny * chocolateBunnyPrice;

        // че всеки клиент закупил четен брой продукти, ще получи 20% отстъпка от крайната цена
        if (totalItems % 2 === 0) {
            price -= price * 0.20;
        }

        // При получаване на командата "Finish" да се отпечата един ред
        console.log(`You purchased ${totalItems} items for ${price.toFixed(2)} leva.`);
        totalSum += price;
    }

    // Накрая, след като всички клиенти приключат с покупките, да се отпечата на един ред
    // След като всички клиенти приключат с покупките, трябва да се отпечата средно по колко пари е похарчил всеки човек
    console.log(`Average bill per client is: ${(totalSum / customers).toFixed(2)} leva.`);

;-)

 

0
Saraalkadi avatar Saraalkadi 28 Точки

Огромно благодаря!

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