Софтуерно Инженерство
Loading...
+ Нов въпрос
mgskabrina avatar mgskabrina 2 Точки

Отново за задача 7. The noise and the signal

Решението ми дава 80 % с грешка "Run time error". На какво ли може да се дължи.

И също така не ми е ясно как трябва да се дефинира този символ от ASCII таблицата, който е най-напред - най-голямото репрезентиране като int число.

Благодаря!

Тагове:
0
C++ Fundamentals
galin_kostadinov avatar galin_kostadinov 163 Точки

Привет!

В тази таблица символите се подреждат в определен ред:

http://www.asciitable.com/

http://www.cplusplus.com/reference/string/string/compare/

Когато кажеш bool isTrue =  '+'  <  'a', то isTrue = true; понеже в тази таблица първия посочен символ заема по предно място 43-то място, а втория 97-мо.

Когато имаш един стринг, който е низ от символи, ако приложиш някой от операторите за сравнение, то ще започне да сравнява символ по символ, от първия до последния индекс на стринговете. Ако първия символ със първия на другия стрънг са равни, то продълава нататък, доката не открие някой различен, тогава ти връща съответния резултат. Ако единия текст е по-дълъг от втория, но по-малкия текст по-цялата си дъжина съвпада с втория, тогава вече се гледа и дължината. Но това е все едно да сравняваш null(0) със z(122):

bool textComparator = std::string("abcazzzz") < std::string("abca"); -> false

bool textComparator2 = std::string("aaaaaaa") < std::string("bb"); -> true

В конкретана задача може да си получил грешен резултат след като си приложил провераката от тип textComparator2 , тъй като от една страна имаш по-дълъг стринг, сравнявайки по дължина чрез .size(), но от друга сравнен лексикографски (<) излиза, че е по-малък.

Ако си запаметил "aaa" като текущ, ако дойде "bbbb" трябва да запаметиш него.

Поздрави!

 

0
mgskabrina avatar mgskabrina 2 Точки

Много ти благодаря! Такава логика следвам. Но както и да я въртя задачата все ми дава 80/100, с RunTime Error.

Не е проблема в грешен отговор, липсващите 20 % излизат като звездичка.

0
Vankata83 avatar Vankata83 72 Точки

Ако е runtime error, провери циклите, които въртиш за някой граничен случай.

За момента само това се сещам.

Поздрави :)

0
Evgdelg avatar Evgdelg 1 Точки

Здравей, колега,

Ето моето решение, в което използвам една от функциите, вградени в стандартната библиотека на C++ std::lexicographical_compare. Тя е част от <algorithm>. Първо сравнявам по размер най-голямият стринг до момента и новонамерения в редицата. Ако двата string-а са равни по размер или съм намерил нов по-голям по размер string, използвам тази функция, за да сравня string-овете като в речник.

Може би не е най-оптималното решение, но в Judge минава 100/100, въпреки че Тест 3 отново връща различен от очаквания резултат broken heart.

Надявам се съм помогнал.

0