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

Longest sequence of equal elements in an integer array

Здравейте,

Успях горе долу да ивзлека най-дългата повтаряща се редица от елементи. Кодът по-долу работи, освен ако повтарящата се редица не е в началото: http://pastebin.com/jvByEzCT

Някакви идеи защо не мога да преброя точно първите числа ?

Благодаря,

Любо

 

 

0
C++ Programming 14/03/2017 22:40:15
v.krastev avatar v.krastev 58 Точки

На въпроса ти - проблема е в

for (int i=1; i<N; i++){
      if (s[i] == s[i+1]){
      counter++;
         if (counter>longest){
            longest=counter;
            repeatNumber = s[i];
            //cout<<repeatNumber<<" end ";
            }
           }
         }

започни цикъла от i = 0, защото i е индексът на елемента от масива, а първият елемент е с индекс 0, не с едно. Това ще ти го направи да работи ако поредицата ти от еднкави интове започва от първата позиция в масива.

НО, кодът ти няма да работи при масив 1 4 12 3 6 7 9 3 5. Тук трябва да изкараш: 3 3, но ти няма да изкараш нищо, защото втората тройка не е следващия елемент след първата тройка. първата тройка ти е i, но втората не е i+1(както ти е в if-a), а е i+n. Като нататък може да има и други тройки. Не знам, аз така тълкува условието - повтарящи се елементи като цяло, а не един след друг. За да го направиш, направи втори for цикъл в първи, за всяко i, го сравнявай с всички останали елементи до края на масива, не само със следващия. Другото нещо, при масив 1 9 4 6 5 6 7 9 8, кое ще изкараш - двете деветки или двете шестици? :D Това го правиш просто с още един брояч и променлива която помни стойността на другото повтарящо се число.

Това е моето тълкувание на условието, ако има нещо пиши.

0
IvanMitkov avatar IvanMitkov 19 Точки

sequence of equal предполага че числата са поредни и еднакви. Ако ще трябва да се намира просто кое число се среща най-често това е вече съвсем различна задача.

1
v.krastev avatar v.krastev 58 Точки

според мен 1 3 2 2 2 5 4 е частен случай на 1 2 3 2 5 2 4, защо да е друга задача?  Ако масива ми е: 5 - тоест един елемент, трябва да си изкара че най дългата редица е: 5. Но, ако масива ми е: 5 7 да речем, тук не виждам никакъв sequence of equal. 5 7 5 или 5 5 7 или 7 5 5, все тая, ми изкарва: 5 5.

За долния коментар, той започва да сравнава елемента с индекс i == 1, с елемента след него - i + 1, след това взима елемент i + 1 и го сравнява с елемент (i + 1) + 1 и т.н. Ако имаш друго предвид, поясни?

0
IvanMitkov avatar IvanMitkov 19 Точки

sequence of equal  означава поредица от еднакви, ако имаш 5 5 5 7 7 1 1 7 7 трябва да ти изкара 5 5 5  а не 7 7 7 7

като достигне до i+1 а i е на края на масива ще излезе извън масива, което никога не е добро нещо. Макар че като нищо може да дава верни резултати, защото боклука който се намира в клетка i+1 може да не влияе. Но може и да прецака нещо.

0
14/03/2017 21:48:42
IvanMitkov avatar IvanMitkov 19 Точки

Между другото най-дългата редица ти е минимум 1 елемент, като я залагаш на нула всъщност броиш един елемент по-малко, ако слагаш i = 1 би трябвало да сравняваш i-1 с i в първата итерация. Не съм ти проверявал кода, но изглежда сякаш че излизаш извън масива. Повтарящия се елемент е също минимум 1 като го залагаш на 0 броиш повторения, което предполага че повтарящите се бройки са с 1 повече.

0
14/03/2017 20:55:50
krasio12356 avatar krasio12356 19 Точки

for (int i=1; i<N; i++){
      if (s[i] == s[i+1])

Почваш от втория елемент и го сравняваш с третия.

Явно не ползваш дебъгер, иначе щеше сам да разбереш

0