Loading...
NinessonC avatar NinessonC 4 Точки

Въпрос за първа задача от второ домашно - Compare arrays

Здравейте, от няколко часа се опитвам да реша задачата по всевъзможни начини, но на тестовете винаги ми изкарва 80/100. По условието на задачата разбирам, че трябва да създадем два едномерни масива, без първоначално зададени размер и стойности на елементите. След известно проучване започвам да си мисля, че това не е възможно и единственото ми решение остава да използвам динамичен масив, но не искам, тъй като все още не сме взели материала и предполагам, че има и друг вариант. Прикачвам кода, който съм написал до момента, за да видите къде може би греша. Предварително съм задал размер на масивите, тъй като не знам как да го направя с user input. На VS работи, но в джъджа 80/100.  Благодаря ви предварително :)

 

код: https://pastebin.com/CZDnSSSs

Тагове:
1
C++ Fundamentals
galin_kostadinov avatar galin_kostadinov 166 Точки
Best Answer

Привет! Прегладах кода ти и искам да отбележа няколко неща.

1. В случая е трябва да използваш вектор, както казва колегата, вариянт за това е следният:

int firstArrSize = 0;
cin >> firstArrSize;

vector<int> firstArr(firstArrSize);
read(firstArr, firstArrSize);

2. След като провериш дължините на двата вектора, то следва да провериш елемент по елемет по съответстващите им индекси дали векторите съдържат еднакви стойности.

if (firstArr[i] != secondArr[i]) {
    return false;//върни, че са различни, като това в случая съм го направил във функция.
}

3. Варианта, който си написал if (arr1 == arr2)  сравнява масивите по референция, т.е. дали се намират на едно и също място в паметта. И в случая ако е вярно това означава, че масива е един и същ, а не че масивите са два, които са на различно място в паментта, но са с едвакви стойности, което се иска в задачата.

Поздрави!

0
kolioi avatar kolioi 641 Точки

Операторите за сравнение (==,!=,<,<=,>,>=) са предефинирани за почти всички STL контейнери

https://en.cppreference.com/w/cpp/container/vector/operator_cmp

Така че колегата, случайно или не, го е направил много добре.

0
NinessonC avatar NinessonC 4 Точки

Интересното е, че като сменя размера на единия масив ми иска да предефинирам оператора за сравнение, за да може да сравни масив с 4 елемента и с 5 елемента. Не знаех, че не може без предефиниране :D

0
NinessonC avatar NinessonC 4 Точки

Благодаря ти за изчерпателния отговор. Ще го направя с вектори, а това което каза за сравнението на на arr1 == arr2, в стака прочетох, че ако масивите са създадени от хедър <array> , сравнява елементите, а като е създаден без хедъра, сравнява адресите на първите елементи. 

0
pa_kon avatar pa_kon 3 Точки

аз го направих без вектор , с масив

int lenght1=0;

    int lenght2=0;

 
    int arr1[lenght1];
    int arr2[lenght2];

 
    cin >> lenght1;

 
    for (int i = 0;i<lenght1;i++) {
        cin>>arr1[i];
    }

 
    cin >> lenght2;

 
    for (int i = 0;i<lenght2;i++) {
        cin>>arr2[i];
    }
0
j.petrov_90 avatar j.petrov_90 373 Точки

Колега, pa-kon,

Това, което си написал е вярно, но няма да работи на всички платформи.
​​​​​​​
Казвам за 5ти път (другите 4 бяха споменати по време на лекцията).
Кодът, който си напидал е извън стандард, защото си използвал масиви с променлива дължина.
Приканвам те:
1) или използвай масиви с дължина, която е известна compile time (например const int MAX_SIZE = 100;)
2) или използвай std::vector, който може динамично да променя дължината си.

Поздрави

0
pa_kon avatar pa_kon 3 Точки

ясно :) , аз мислех че задачите съответстват на части от лекцията , а векторите бяха в края на лекцията

0
krstoilo avatar krstoilo 3 Точки

Здравейте колеги,

Аз също забих на 60/100 в Judge на тази задача, което ме навежда на мисълта, че някъде изкарвам късмет. :D

Когато run-вам кода в СodeBlocks ми изкарва правилен отговор дори на тестове, които Judge изкарва като грешни.

Съжалявам, ако кодът е много идиотски, но умишлено се опитвам да използвам масиви, за да схвана логиката, а пък от оптимизация явно съм още доста далеч :D

Ако някой има възможност, може ли да погледнете и да ми кажете какво е крайно не-наред?

код : https://pastebin.com/tSaRaLgW

Благодаря предварително!

Кремена :)

 

0
29/09/2019 14:31:46
Vankata83 avatar Vankata83 72 Точки

Здравей

Прегледай отговора на Галин Костадинов от тази тема (цъкни бутона "виж всички отговори").

Написала си метод, който сравнява масивите по референция, а не сравнява стойностите им.

Колегата много хубаво го е обяснил.

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

Преди това може да ги сравниш по брой елементи, които съдържат - ако е различен броя значи не са еднакви. Това може да ти е като първо условие.

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