Loading...

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

nikola.m.nikolov avatar nikola.m.nikolov 830 Точки
Best Answer

Не знам дали си гледал от авторското решение, защото твоето е доста подобно, но то е за малко по-различно условие, защото записва резултата във файл, а и има break-ове във for цикъла, заради които не минава един тест.

Конкретно за твоето решение имаш следните грешки:

  1. При символ % винаги купуваш без да имаш проверка дали moneyStart > 0. Можеш да добавиш това след реда с делението: puchases += moneyStart > 0 ? 1 : 0;​

  2. В else-a също ти е доста объркана логиката. Първо, че не преизчисляваш price-a и той винаги е 0 в else-а и второ, че винаги купуваш, без да имаш проверка дали има достатъчно пари.

  3. Break НЕ ТРЯБВА да се използва. Причината е, че и при двата break-а се прекъсва по-нататъшната обработка на стринга и направо се прочита следващия ред. Използвай вместо това continue

Малко съвети:

  1. Първия while цикъл е ненужен. В условието ясно си е казано, че на първия ред ще е сумата, с която разползга и след това mall.Enter. Няма никакви излишни редове между тях.

  2. Проверката дали символа е UpperLetter и LowerLetter може да се направи по по-лесен начин. Char класа си има следните статичните методи Char.IsLetter()Char.IsUpper() и Char.IsLower(). В първите 2 if-a не ти ли прави впечатление, че имаш повторение на код? Може да ги обединиш ето така:

    char chr = actions[i];
    
    if (Char.IsLetter(chr))
    {
        decimal discount= Char.IsUpper(chr) ? 0.5m : 0.3m;
        price = chr * discount;
        if (money >= price)
        {
            money -= price;
            purchases++;
        }           
    }   

    3. Не се прави if, чията функция е само да има оператор break или continue. Вместо това обърни проверката и вкарай логиката в този if. Виж примера ми от предната точка.

2
10/03/2016 09:36:21
gadjov avatar gadjov 115 Точки

Много благодаря колеги за изчерпателните отговори. Наистина взаимствах от решението след няколко провала с метода .split() После като имам възможност ще пробвам този метод с char. IsUpper. Ще я мъча тази задача, въпреки,  че незнам дали не се хвърлям в много дълбоки води, но без мъка няма знания. Да сте живи и здрави и отново благодаря за помоща! 

пс. После от лаптопа ще кача кода другаде, за да е по прилежно. И се извинявам за което. Поздрави! 

0
KOSTADINMARKOV avatar KOSTADINMARKOV 22 Точки

Със Split()  е доста по лесно,защото директно ги записваш в отделни променливи.

1
Ivanov.Ivan avatar Ivanov.Ivan Trainer 558 Точки

Не съм решавал задачата, но сега и прочетох условието. Пробвай да дебъгнеш и обърни внимание какво се случва в тази else конструкция:

else
{
 moneyStart -= price;
 puchases++;
} ----> В условието е казано, че за всеки друг ASCII символ тя не получава отстъпка, за това просто изваждаш стойността му. Тук в случая вадиш стойността на price, която е само дефинирана със стойност 0, никъде не присвояваш стойността на ASCII символа. Пробвай да добавиш 
price = actions[i]; и най - важното -> DEBUG

Успех!

P.S. Съветвам те за споделяне на код да използваш pastebin.com или GitHub. Модераторите щом видят така изплющян код го трият и ти се карат. А и така трудно се разчита.

1
10/03/2016 09:32:32
KOSTADINMARKOV avatar KOSTADINMARKOV 22 Точки

Добре си започнал да я решаваш и с още съвсем малко и ще я решиш ,колегите преди мен са посачили как.

1
gadjov avatar gadjov 115 Точки

Благодаря на всички отново! Най-сетне я разбрах задачата и къде бърках.Прилагам решението ми ако някой му потрябва:

http://pastebin.com/64FuTsiG

 

0
iliyants avatar iliyants 6 Точки

Здравейте,

Опитах се да реша тази задача, но съм доста нов и затова разгледах авторското решение.

Това което не разбрах е в тази част на кода, какво точно прави "actions [ i ] " , и от каде се появява. Предполагам е свързано с "actions.Length", но не ми става напълно ясно как работи.

  while (command != "mall.Exit")
        {
            string actions = command;
            for (int i = 0; i < actions.Length; i++)
            {
                decimal price = 0;
                if (actions[i] >= 65 && actions[i] <= 90)
                {
                    price = actions[i] * 0.5m;
                    if (money < price)
                    {
                        continue;
                    }

                    money -= price;
                    purchases++;
                }

Благодаря предварително.:)

0
02/12/2016 21:34:56
Radostta avatar Radostta 6 Точки

На мен ми гърмеше един тест (накрая се оказа, че е защото съм позлвала double вместо decimal), и погледнах авторското решение за сравнение. На мен ми липсваха проверката в началото за въведени символи преди mall.Enter, както и създаването на допълнителна променлива "actions". Предполагам, че е добра практика да се обработват данните в друга променлива. А за първоначалните екшъни, от показаните във файла тестове - няма такива преди влизането в мола.

Опитах и без двете, и с двете, и само с едното, и задачата пак дава 100/100; Единственият проблем беше, че double-ът не е удържал всички тестове.

https://pastebin.com/6jdqPnSi

0
11/09/2017 15:36:30
Rumbata2 avatar Rumbata2 1 Точки

Бих бил много благодарен ако някой прегледа и моя код и ми помогне да разбера защо получавам 50/100 в джъджа

 

https://pastebin.com/gkxaG27g

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