Loading...
rpopova avatar rpopova 44 Точки

[Exam Problems] C# Basics - Exam Schedule

Здравейте,

ето решението ми https://github.com/rozay/rozay/issues/1 , искам да попитам някой има ли идея защо не ми минава 4тия тест в judge-a ? Изтеглих си рар-а с тестовете и вкарах input-a от 4тия тест и на моята машина си дава правилния резултат. http://judge.softuni.bg/Contests/7/CSharp-Basics-Exam-12-April-2014-Evening ето и условието :) 
 
Благодаря предварително 

Тагове:
3
Programming Basics
RumenVasilev avatar RumenVasilev 103 Точки

Ще използвам темата на клежката за да не пускам друга тема. Само на мен ли ми дава 83/100 точки на задачата SumOfElements ot Exam 11 april 2014 Morning? Убих си 1 час пробвайки всевъзможни решения, докато накрая не пейстнах и авторското решение на което също ми дава 83 точки. Питам не защото е кой знае какъв проблем, но все пак е хубаво да се оправи, защото на изпита, ако се случи ще е малко гадно :)

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Да и аз сега пробвах с авторовото решение и ми дава 83. Ето моето решение, което дава 100/100:

SumOfElements

0
Filkolev avatar Filkolev 4482 Точки

И аз при първия събмит съм имал 83/100, след това съм нанесъл промяна, доколкото виждам съм ползвал първия път масив от int, а след това съм го променил на масив от long и получавам вече 100/100. Промяната съм я направил веднага след първия събмит и честно казано не знам защо така ми е хрумнало да го направя, но е сработило. 

1
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Именно в използването на int е проблема в авторовото решение. По условие всяко число може да е до 2 000 000 000 и да имаме до 1 000 числа. Сумата на 1 000 такива максимални числа надвишава int.

0
Filkolev avatar Filkolev 4482 Точки

Да, то е ясно, че сумата ще надвиши int, затова декларирам променливите sum и minDiff, които слагам от тип long. Оказва се обаче, че самите числа (които са в рамките на int) като ги запазя в масив от int-ове, след това сметките не излизат правилно. Не ми смята програмата добре minDiff и в момента се мъча да разбера защо точно. 

Решил съм си проблема, като и самите входни числа запазвам като long в масив. Така вече сметките са коректни и задачата ми дава 100 т. Но не мога за момента да разбера защо първият начин гърми на последните два теста, та сега с това се занимавам.

Едит: Улових къде става грешката. Правя проверка дали текущата разлика на елементите е по-малка от най-малката към момента ето така:

else if (Math.Abs(sumOfElements - 2 * numbers[i]) < minimumDiff)
{
minimumDiff = (long)Math.Abs(sumOfElements - 2 * numbers[i]);
}

Само че този израз: sumOfElements - 2 * numbers[i] дава грешен резултат в проверката. Ако след двойката сложа L да покажа, че е long тогава вече всичко е наред и отпада нуждата да запазвам числата като long. Явно трябва в този израз поне едно от двете числа (2 или numbers[i]) да е от тип long, за да се сметне разликата правилно.

Предполагам, че самият израз 2*numbers[i], понеже съдържа само int-ове, се счита за int, но 2*2 000 000 000 препълва int-a. В случая бях си изкарал 100 точки без реално да съм разбрал напълно защо първото ми решение не е сработило. По-добре късно отколкото никога :)

1
RumenVasilev avatar RumenVasilev 103 Точки
Супер включване колеги! Въобще не бях обърнал внимание за широчината на числото! Вече свети червената лампичка :) @Filkolev, абсолютно си прав за L след двойката, няма по- добро решение. По- интересното в случая за мен е, защо авторското решение е с int? Явно някой не си пробва кода :D
0
Filkolev avatar Filkolev 4482 Точки

Ето в крайна сметка решението ми: Pastebin.

Имах и друг вариант, ползвайки Linq и методите за конвертиране на всички елементи на масив от string към int - Array.ConvertAll, както и за сумиране на елементите Sum(). Но този начин го подкарах само като запазих числата в long масив, защото в противен случай Sum() дава overflow exception в някои тестове. Иначе малко намалява броя редове, но пък увеличава използваната памет с 1МБ, така че няма много смисъл да се прави така. А и не ми се занимава повече с тази задача, мисля, че научих каквото можах от нея.

0
kiso_blg avatar kiso_blg 57 Точки

При въвеждане на максималния вход по условие 12:59 АМ 23:59 не ти връща отговор.

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