Loading...
Jordan_Dobrev12 avatar Jordan_Dobrev12 336 Точки

HomeWork(Finds the longest Integer) C++ - Memory Management

Здравейте колеги , не съм много сигурен в условието на една задача. Става въпрос за 2-ра задача от домашното.

Write a program that finds the longest sequence of equal elements in an integer array and then prints that sequence on the console (integers separated by space or newline)

" Намерете най-дългият последователен елемент в масива "   Както ще рече това?

Ако имаме ,примерно:

" 3, 23, 44444444 , 421,55,11 "

Какво трябва да вземе... 44444444 ли ?

 

Другото,с което не мога да се справя е как да взема дължината на един масив  във for цикъла?

Това , което искам да направя е да мина през целият масив с един for и да му кажа "

 if(IntegerArray[i] > n){
        cout << IntegerArray[i];
       }

със " size " не ми се компилира програмата.

N е броят на масива , а IntegerArray е самия масив.

 

Предложения за намиране на по-лесен и удобен алгоритъм ?

 

0
C++ Programming
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей,

Задачата е да намериш най-дългата последователност от еднакви числа в един масив. Тоест ако имаш 17, 5, 5, 13, 256, 256, 256, 5, 5, 17, 17, тогава трябва да изведеш: 256 256 256. Тоест не най-дългото число (това просто би било същото като да намериш най-голямото число, защото в нашата бройна система колкото по-дълго е едно число, толкова по-голямо е), а най-дългата непрекъсната поредица от числа в масива.

Втория ти въпрос не го разбирам честно казано. Как така да вземеш дължината на масив във for цикъл? Цялата идея на обхождането на масив с for цикъл е да знаеш размера на масива предварително. Няма как да обхождаш масива и да разбереш колко е голям (добре де, за C-String, което е char масив завършващ с '\0', има как, но предполагам не това питаш - изобщо за всеки масив, на който му знаеш последния елемент е достатъчно да пуснеш един цикъл докато не стигнеш до последния елемент).

Може би имаш предвид как да прочетеш един масив от конзолата? Обичайния подход е първо да въведеш едно число - размерът на масива - и след това толкова на брой елементи. Друг вариант е да ползваш getline и stringstream:

 1 string input;
 2  getline(cin, input);
 3  stringstream inputStream(input);
 4  int i = 0;
 5  while (inputStream >> array[i]) {
 6      i++;
 7  }
 8  
 9  }

Тук разбира се идва проблемът колко да е размерът на array първоначално. Имаш няколко варианта:

а) да направиш същото като вход, само че преди да направиш масива, само да минеш по inputStream колкото да преброиш числата, и след това да създадеш масива с тази бройка и да го въведеш наново:

string input;

getline(cin, input);

stringstream countStream(input);

int arrSize = 0;

int dummyVariable;

while(countStream >> dummyVariable) {

    arrSize++;

}

int array[arraySize]; //нататък e същото като от 3-ти ред на по-горния пример

б) по някакъв друг начин да преброиш числата във входните данни (примерно да броиш space-ове или нещо такова) и да създадеш масива с такъв размер

в) да ползваш класа вектор:

#include<vector>

...

vector<int> array;

int number;

while(inputStream >> number) {

    array.push_back(number);

}
//оттук нататък можеш да третираш array почти като съвсем нормален масив (примерно array[0] ще ти даде първия елемент), а array.size() ще ти даде размерът му

Поздрави,

Жоро

2
18/03/2017 02:26:43
MartinBG avatar MartinBG 4803 Точки

В задачата се търси "the longest sequence of equal elements in an integer array" - най-дългата последователност от еднакви елементи на масив от цели числа, т.е. ако имаме масив от следните числа:

[6666, 6666, 1, 1, 1, 6666, 6666]

очакваният резултат е

1 1 1

защото това са 3 последователни еднакви елемента.

 

Не съм много сигурен какъв точно е вторият Ви въпрос, защото възможните отговори се съдържат в него :)

При известен брой елементи на масива (приемам, че те са известни, защото са необходими за създаването и инициализирането на масива), може да правите for цикъла до тях:

for (int i = 0; i < N; i++) { .... } // N - брой елементи в масива

За конкретната задачи Ви трябва по-скоро сравняване на съседни елементи в масива:

IntegerArray[i - 1] == IntegerArray [i] или IntegerArray[i - 1] != IntegerArray [i]

или

IntegerArray[i] == IntegerArray [i + 1] или IntegerArray[i] != IntegerArray [i + 1]

според алгоритъма за намиране на най-дълга последователност от съседни еднакви елементи, който сте избрали да ползвате.

2
krasio12356 avatar krasio12356 19 Точки

Елементите на масива са числа, а не цифрите от десетичното представяне на на числата. Числото 4444444 е едно число, един елемент на масива.

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