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

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

В задачата се търси "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