21.02.2016 passion days моля помощ
Значи измислих го до тука и незнам защо ми дава грешки джъджа 30/100
Много ще съм благодарен,ако някой бутне едно рамо
Значи измислих го до тука и незнам защо ми дава грешки джъджа 30/100
Много ще съм благодарен,ако някой бутне едно рамо
Не знам дали си гледал от авторското решение, защото твоето е доста подобно, но то е за малко по-различно условие, защото записва резултата във файл, а и има break-ове във for цикъла, заради които не минава един тест.
Конкретно за твоето решение имаш следните грешки:
При символ % винаги купуваш без да имаш проверка дали moneyStart > 0. Можеш да добавиш това след реда с делението: puchases += moneyStart > 0 ? 1 : 0;
В else-a също ти е доста объркана логиката. Първо, че не преизчисляваш price-a и той винаги е 0 в else-а и второ, че винаги купуваш, без да имаш проверка дали има достатъчно пари.
Break НЕ ТРЯБВА да се използва. Причината е, че и при двата break-а се прекъсва по-нататъшната обработка на стринга и направо се прочита следващия ред. Използвай вместо това continue
Малко съвети:
Първия while цикъл е ненужен. В условието ясно си е казано, че на първия ред ще е сумата, с която разползга и след това mall.Enter. Няма никакви излишни редове между тях.
Проверката дали символа е 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. Виж примера ми от предната точка.
Не съм решавал задачата, но сега и прочетох условието. Пробвай да дебъгнеш и обърни внимание какво се случва в тази else конструкция:
else
{
moneyStart -= price;
puchases++;
} ----> В условието е казано, че за всеки друг
ASCII символ тя не получава отстъпка, за това просто изваждаш стойността му. Тук в случая вадиш стойността на price, която е само дефинирана със стойност 0, никъде не присвояваш стойността на ASCII символа. Пробвай да добавиш
price = actions[i]; и най - важното -> DEBUG
Успех!
P.S. Съветвам те за споделяне на код да използваш pastebin.com или GitHub. Модераторите щом видят така изплющян код го трият и ти се карат. А и така трудно се разчита.
Добре си започнал да я решаваш и с още съвсем малко и ще я решиш ,колегите преди мен са посачили как.
Благодаря на всички отново! Най-сетне я разбрах задачата и къде бърках.Прилагам решението ми ако някой му потрябва:
Здравейте,
Опитах се да реша тази задача, но съм доста нов и затова разгледах авторското решение.
Това което не разбрах е в тази част на кода, какво точно прави "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++;
}
Благодаря предварително.:)
На мен ми гърмеше един тест (накрая се оказа, че е защото съм позлвала double вместо decimal), и погледнах авторското решение за сравнение. На мен ми липсваха проверката в началото за въведени символи преди mall.Enter, както и създаването на допълнителна променлива "actions". Предполагам, че е добра практика да се обработват данните в друга променлива. А за първоначалните екшъни, от показаните във файла тестове - няма такива преди влизането в мола.
Опитах и без двете, и с двете, и само с едното, и задачата пак дава 100/100; Единственият проблем беше, че double-ът не е удържал всички тестове.
Бих бил много благодарен ако някой прегледа и моя код и ми помогне да разбера защо получавам 50/100 в джъджа
https://pastebin.com/gkxaG27g
Много благодаря колеги за изчерпателните отговори. Наистина взаимствах от решението след няколко провала с метода .split() После като имам възможност ще пробвам този метод с char. IsUpper. Ще я мъча тази задача, въпреки, че незнам дали не се хвърлям в много дълбоки води, но без мъка няма знания. Да сте живи и здрави и отново благодаря за помоща!
пс. После от лаптопа ще кача кода другаде, за да е по прилежно. И се извинявам за което. Поздрави!
Със Split() е доста по лесно,защото директно ги записваш в отделни променливи.