Здравейте,
Имам следния проблем.
Опитвам се да реша следната задача със Java.
Стигам до това решение.
Проблема ми е при втория loop.
Ще съм благодарен, някой да ми посочи къде ми куца логиката.
Поздрави!
Здравейте,
Имам следния проблем.
Опитвам се да реша следната задача със Java.
Стигам до това решение.
Проблема ми е при втория loop.
Ще съм благодарен, някой да ми посочи къде ми куца логиката.
Поздрави!
Здравей,
добави фигурните скоби за тялото на else, добави кръглата скоба в края на println конструкцията, инициализирай си maxSequence със стойност 1 и в тялото на else също да става 1, защото трябва да броиш и текущия елемент, и последно при извеждането на резултата не използвай последния елемент, а първия, т.е. с индекс 0, тъй като ги сортираш в низходящ ред. Успех!
Здравей, Ивайло,
Благодаря за насоките и за бързата реакция. Поправих кода по начина по който ми посочи и започна да работи в IntelliJ за конкретни примери. При зададени само еднакви числа ми дава грешката “IndexOutOfBoundsException” , а при примерния input на задачата не съвпада отгавора.
Здравей отново,
“IndexOutOfBoundsException” излиза защото, когато всички числа са еднави, изпълнението никога не влиза в else конструкцията и така размера на result е нула и програмата се чупи в последния ред при извеждането на резултата.
Разгледах малко по-внимателно задачата и мога да ти предложа доста по-простичък вариант. Не са нужни два цикъла, нито списък в който да записваш броя на последователните еднакви елементи, които да сортираш.
Предлагам ти просто да направиш един цикъл в който да сравняваш съседни елементи. Ако са еднакви, увеличаваш maxSequence и с continue преминаваш към следващата итерация. Ако обаче не са еднакви, проверяваш дали maxSequence е по-голямо от досегашния “рекорд” записан в result и ако е така, result приема стойността на maxSequence, а maxSequence започва да брои отново от 1. И тъй като отново може всички елементи да са еднакви и никога да не влезем във втория if, съответно result няма приеме стоиността на maxSequence, решаваме да изведем в println по-голямото от двете. Мисля че сега всичко е точно, но ако не е пиши пак.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int elements = scanner.nextInt();
int[] arr = new int[elements];
int maxSequence = 1;
int result = 0;
for (int i = 0; i < elements; i++) {
arr[i] = scanner.nextInt();
}
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] == arr[i + 1]) {
maxSequence++;
continue;
}
if (maxSequence > result) {
result = maxSequence;
maxSequence = 1;
}
}
System.out.println(Math.max(result, maxSequence));
}
}
Привет.
И това решение дава само частичен отговор. В примера който е зададен в
условието(2 1 1 2 3 3 2 2 2 1) програмата връща отговор 4, а примерно при input(2 2 1 1 2 2 1 1 2 2)
връща 3, за което нямам обяснение. Забелязах че и моето решение не връща правилни отговори на примерите, моля някой ако може да разясни защо се чупят кодовете да разясни.
Подведох те, извинявай. Логиката ми е грешна и благодаря че писа. Значи трябва при всички случаи или да увеличаваме maxSequence ако елементите са еднакви, или да го зануляваме ако са различни. Това ще направим чрез if-else. Присвояването на текущия резултат трябва да стане преди зануляването и при условие, че maxSequence е повече от досега записания резултат.
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] == arr[i + 1]) {
maxSequence++;
} else {
if (maxSequence > result) {
result = maxSequence;
}
maxSequence = 1;
}
}
Привет, Ивайло,
Благодаря че писа. По този начин програмата минава в Judje и на мен лично ми беше много ползна, понеже изпитвах трудности с изграждането на правилна else-if конструкция. Остава обаче още един проблем, който Judje не проверява и това е ако няма повтарящи се числа в масива.
Помъчих се малко и стигнах до следното решение на проблема
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] == arr[i + 1]) {
maxSequence++;
} else {
if (maxSequence > result) {
result = maxSequence;
}
maxSequence = 1;
}
}
if (result == 1 && maxSequence == 1){
System.out.println("0");
}else {
System.out.println(Math.max(result, maxSequence));
}
Мерси отново за помоща, надявам се темата да е била полезна.
Поздрави,
Иван.