Loading...
zlobjul avatar zlobjul 4 Точки

JA3 Task 2 - Near Cities

Здравейте и за много години ! 

Скалъпих някакъв вариант на JA3 Task2 и решавам 60 % от случаите с него . Тествах при мен , но не успях да хвана ситуациите, в които греши.

Може ли някакви по-специфични случаи за тест да ми предложите ?

Благодаря!

Тагове:
0
C++ Fundamentals
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки
Best Answer

Здравей, за много години!

Като гледам тестовете, които не минаваш, ми изглежда, че не си тествал много добре ситуациите, в които има двойки градове с еднакви разстояния (иначе кодът на решението ти ми изглежда верен). В такива ситуации, според условието, трябва да изведеш двойката градове, на която първия град се е появил първи (и ако той е един и същи подреждаш по това кой от вторите градове е срещнат първи. В условието има пример за 3 града, но за 4 града (две различни двойки) става по-особено:

Ако имаме градовете A, B, C, D, като разстоянието (A, B) е еднакво с разстоянието (C, D), то тогава отговорът би бил A-B в следните подредби на входните данни:

- A B C D (и A B D C, същата ситуация е)

- A C B D (и A D B C, същата ситуация е)

- А C D B (и A D C B, същата ситуация е)

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

Поздрави,

Жоро

0
zlobjul avatar zlobjul 4 Точки

Благодаря!

Условието според мен е подвеждащо и неправилно. Останах с впечатление , че трябва да се изведе първооткрита най-къса дистанция при сучай на еднакви разстояния :

Also, if there are multiple pairs of towns with the same distance between each other, print the one that appears first in the input.

Тоест ако въведем :

A 0 0
C 5 5
D 5 6
B 0 1

Коя е първооткрита най-къса дистанция ?

Ами C-D , още преди да сме въвели B , вече имаме най-къса дистанция .

Условието е подвеждащо и според мен е неправилно в по-горната ситуация отговорът да е А-B или по-скоро трябваше да се даде допълнителното обяснение с 4 града , не с 3 .

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

Поздрави ,

Любо

 

0
MartinPaunov avatar MartinPaunov 77 Точки

Здравей,

Зависи какъв метод за решаване използваш много общо понятие е да се каже специфичен случай. Като за начало се сещам, че в задачата има и нулеви стойности за координатите, можеш да провериш дали някъде (ако имаш умножение, не се получава грешна стойност). Пробвай и с други методи, ако този който си започнал не работи. При мен всички тестове минаха използвах  ето тези формули. Дано съм ти бил полезен, но ако искаш по-конкретна помощ би следвало и въпросът да е зададен в конкретна посока.

Поздрави

0
zlobjul avatar zlobjul 4 Точки

Благодаря , аз използвам следната формула за намиране на разстоянието между две точки : sqrt(pow((Ax-Bx),2) + pow((Ay-By),2));  ( Като това се връща като float ) 

Направих тестове с 0 и минават. 

По-конкретно бих могъл да paste-на кода , но няма как защото не е позволено . 

с няколко думи - намирам разстоянието на всеки въведен вектор с преди него въведените и сравнявам със сегашното най-късо. Най-късото намерено разстояние слагам във вектор, а в друг вектор слагам имената name1 + ''-' + name2 и извеждам последния намерен резултат. Където name2 е името на в момента въведения град а name1 на този от по-задните, които се сравняват. 

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

0
02/01/2018 09:51:26
MartinPaunov avatar MartinPaunov 77 Точки

Здарвей отново

Не съм напълно сигурен но мисля че имаш грешка във формулата пробвай вместо да ги събираш да ги извадиш. Също така ти предлагам да разделиш формулата на две отделни стъпки така ще ти е по-лесно да дебъгваш а и мисля че грешно търсиш най-краткия път. Друго което ми улесни решаването беше че използвах два стринга за извеждане на най-късото разстоябие, тъй като за краен резултат ни интересуват само имената на градовете. Дано това ти помогне. Пак казвам не съм напълно сигурен че разбирам какво точно прави програмата ти и че това което ти казвам ще помогне но все пак дано имаш някаква полза.

Поздрави

0
02/01/2018 10:05:45
zlobjul avatar zlobjul 4 Точки

Благодаря , формулата е вярна - това е питагоровата теорема за правоъгълен триъгълник - c^2 = a^2 + b^2 . Явно проблема е в това, което изкарвам в дадена ситуация , но не мога да разбера защо - сравнявам въведения вектор със всички въведени преди него и ако най-малкото разстоянив записвам имената на двата вектора с "-" , после извеждам последно откритото . Например : 

въвеждам А ( 10,1)

въвеждам B(0,1)

най-къстото разстояние е A-B за момента 

въвеждам С(5,1)

сравнявам C с А (най-късото се променя А-С), сравнявам С с В. 

въвеждам D (1,1)

сравнявам D с А,B,C ( най-късото се променя на B-D)

извеждам B-D понеже е последно в списъка с най-къси разстояния . 

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