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 54 Точки

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

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 20 Точки

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

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

според мен 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 20 Точки

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 20 Точки

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