Loading...
Borislav919 avatar Borislav919 1 Точки

02. Longest Sequence

Здравейте. Може ли малко помощ със задачата. С входа и изхода всичко е наред т.е. при задаване на входа от условието изходът излиза също по условие, но judge не ми дава пълният брой точки. Пробвах същата задача с вложен цикъл(за обхождане на масива), също така и кода да бъде само в main функцията. 

#include <iostream>
#include <climits>
#include <array>
using namespace std;


void longestSequence(int arr[],int n){
    int num1=0;
    int num2=0;
    int counter=1;
    int minCounter=INT_MIN;
    int number=0;
    for(int m=1;m<n;m++){
        num1=arr[m-1];
        num2=arr[m];
        if(num1==num2){
            counter++;

        }else{
            counter=1;
        }
        if(minCounter<=counter){
            number=num1;
            minCounter=counter;
        }
    }
    if(minCounter<=1){
        cout<<num2<<endl;
    }else if(minCounter>1){
        for(int k=0;k<minCounter;k++){
            cout<<number<<" ";
        }
    }


}
int main(){
    int length;
    cin>>length;
    int n=length;
    int arr[n];
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    longestSequence(arr,n);
    return 0;
}

Тагове:
0
C++ Fundamentals
l000p avatar l000p 13 Точки

Здравей, давам ти моето решение, не е най-доброто, напротив. Давам ти го с друга цел, ако го разбереш ще разбереш и как да го направиш по-изискано. 
Да знам има много новобрански грешки, не ползвам референции, но хей работи на GCC компайлър :D (don't judge me please). 
Целта ми в това решение беше да използвам само C arrays  (макар и не много умело и извън стандарта на C++).

https://pastebin.com/0kBadSB4

0
Borislav919 avatar Borislav919 1 Точки

Благодаря.

0
galin_kostadinov avatar galin_kostadinov 166 Точки
Привет!

Масива може да ти е с дължина единица, вкючи и тази провека:
if (n == 1) {
    number = arr[0];
    num2 = arr[0];
}

Поздрави!

0
dmartinov avatar dmartinov 37 Точки

Добре, аз имам доста подобна логика на колегата от първия пост с тази разлика, че в main-а съм вкарал логика за случаи, в които ми се опитат да ми подадат 0 или отрицателно число. Имам и споменатата от теб проверка за масив с дължина единица. Въпреки всичко това нещо в Judge дава 80/100. Гледах го толкова много, че зациклих жестоко, но за съжаление не виждам какво изпускам. Може би някой граничен случай или нещо в логиката което ми бяга. Та...имам нужда от помощ. Благодаря предварително!

 

#include <iostream>
#include <array>

void longestSequence(int array[], int length) {

    int number1 = 0;
    int number2 = 0;
    int counter = 1;
    int minCounter = INT_MIN;
    int number = 0;

    for (int i = 1; i < length; i++){
        number1 = array[i - 1];
        number2 = array [i];

        if (number1 == number2){
            counter++;
        } else {
            counter = 1;
        }

        if (minCounter <= counter) {
            number = number1;
            minCounter = counter;
        }

        if (length == 1) {
            number = array[0];
            number2 = array[0];
        }
    }

    if (minCounter <= 1) {
        std::cout << number2 << std::endl;
    } else if (minCounter > 1) {
        for (int i = 0; i < minCounter; i++) {
            std::cout << number << " ";
        }
    }
}

int main() {

    int length = 0;
    std::cin >> length;

    if (length == 0) {
        std::cout << "0";
        return 0;
    }

    if (length > 0) {
        int array[length] = {0};

        for (int i = 0; i < length; i++) {
            std::cin >> array[i];
        }
        longestSequence(array, length);
        } else {
            return 0;
    }

    return 0;
}
0
galin_kostadinov avatar galin_kostadinov 166 Точки

Привет! На твоето решение добавих спомената провекра и ми дава 100/100.

#include <iostream>
#include <array>

void longestSequence(int array[], int length) {

    int number1 = 0;
    int number2 = 0;
    int counter = 1;
    int minCounter = INT_MIN;
    int number = 0;
    if (length == 1) {
        number = array[0];
        number2 = array[0];
    }

    for (int i = 1; i < length; i++){
        number1 = array[i - 1];
        number2 = array [i];

        if (number1 == number2){
            counter++;
        } else {
            counter = 1;
        }

        if (minCounter <= counter) {
            number = number1;
            minCounter = counter;
        }

        if (length == 1) {
            number = array[0];
            number2 = array[0];
        }
    }

    if (minCounter <= 1) {
        std::cout << number2 << std::endl;
    } else if (minCounter > 1) {
        for (int i = 0; i < minCounter; i++) {
            std::cout << number << " ";
        }
    }
}

int main() {

    int length = 0;
    std::cin >> length;

    if (length == 0) {
        std::cout << "0";
        return 0;
    }

    if (length > 0) {
        int array[length] = {0};

        for (int i = 0; i < length; i++) {
            std::cin >> array[i];
        }
        longestSequence(array, length);
        } else {
            return 0;
    }

    return 0;
}

Поздрави!

1
dmartinov avatar dmartinov 37 Точки

Оле Боже....сега видях къде ми е грешката. Аз съм сложил проверката в тялото на FOR-а. Просто ми е била грешно подредена логиката ама така е като зацикли човек :) Благодаря ти много! 

0
Jordan_Jordanov avatar Jordan_Jordanov 16 Точки

Ето едно решение което дава 100/100. Аз имах същия проблем, докато не прочетох тук, че пропускам проверката дали size = 1.

#include <iostream>
#include <vector>

using namespace std;

void fillArray(vector<int>& arr, size_t size)
{
    int num = 0;
    for (size_t i = 0; i < size; ++i)
    {
        cin >> num;
        arr.push_back(num);
    }
}

void printLongestSequence(vector<int>& arr)
{
    size_t size = arr.size(), counter = 0, maxCounter = 0;
    int currentNum = 0;
    if (size == 1)
    {
        cout << arr[0];
        return;
    }
    for (size_t i = 1; i < size; ++i)
    {
        if (i + counter - 1 < size)
        {
            i += counter - 1;
        }
        counter = 0;
        for (size_t j = i; arr[j] == arr[i]; ++j)
        {
            counter++;
            if (j == size - 1)
            {
                break;
            }
        }
        if (counter >= maxCounter)
        {
            maxCounter = counter;
            currentNum = arr[i];
        }
    }
    for (size_t i = 0; i < maxCounter; ++i)
    {
        cout << currentNum << " ";
    }
}

int main()
{
    vector<int> arr;
    int size;
    cin >> size;
    fillArray(arr, size);
    printLongestSequence(arr);
    
    return 0;
}

1
Vik1099 avatar Vik1099 2 Точки

Ето го моето решение ако на някой му е интересно.

https://pastebin.com/kwjBj1tY

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