Здравейте на всички! Правя нова тема, защото тази задача има два варианта - един, който е в Практическите задачи, където условието е доста по-ясно, защото имаме точен брой числа, които се въвеждат на отделни редове, и тази от домашното, където не въвеждаме броя на числата, а директно въвеждаме всички числа на един ред. Аз използвам масив за да реша задачата, но това, което ме затрудни е условието да се започва броенето на позициите от 1, резултатът който получавам е верен, но произведенията на четни и нечетни са разменени. Ще се радвам някой да сподели мнение за тази задача. Ето и цялото условие: You are given n integers (given in a single line, separated by a space).
Write a program that checks whether the product of the odd elements is equal to the product of the even elements.
Elements are counted from 1 to n , so the first element is odd, the second is even, etc.
Здравейте на всички и много благодаря за отговорите! @miroslav.ivnv - това принтиране си го правя за собствена проверка, да съм сигурна че не изпуска числа от масива, то няма отношение към крайния резултат, забравила съм да го махна. @anon71502059 Да, твоето предложние просто да печатам четни на мястото на нечетни е хитро, и работи, но аз си мислех дали може да стане просто със започване на позициите от 1, но не успях да го измисля. Иначе, да, би могла и със стринг да се реши, но понеже я довършвах в последния момент и нямах време, ще си поиграя сега сигурно, но такова решение може би ще работи само с положителни числа, не знам, или може първото да е отрицателно … @vanioni9 Благодаря за твоето решние, то е доста подобно на моето, но е с два цикъла, пробвах го, то също разменя четни и нечетни произведения Отново благодаря на всички
В масив първият елемент винаги е с индекс 0, така че другото, което мога да ти предложа е да въртиш цикъла от 1 до n, но за да вземеш елемент от масива да използваш i-1.
Поздрави!
Много благодаря за помощта! Така наистина стана без да разменям произведенията Иначе поствам и решението със стринг, което също минава, защото са зададени само положителни числа за вход Scanner sc = new Scanner(System.in);
//You are given n integers
// (given in a single line, separated by a space).
//Write a program that checks whether the product
// of the odd elements is equal to the product of the even elements.
//Elements are counted from 1 to n,
// so the first element is odd, the second is even, etc.
String numbersAsString = sc.nextLine();
String noSpaceStr = "" + numbersAsString;
String noSpaceStr2 = noSpaceStr.replaceAll("\\s", "");
int productOdd = 1;
int productEven = 1;
for (int i = 1; i <= noSpaceStr2.length(); i++) {
int digit = Integer.parseInt("" + noSpaceStr2.charAt(i-1));
if (i % 2 == 0) {
productEven = productEven * digit;
} else {
productOdd = productOdd * digit;
}
}
System.out.println("Even product: " + productEven);
System.out.println("Odd product: " + productOdd);
if (productEven == productOdd) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
Моля. Иначе идеята е много простичка. Базираме се на даденото по условие, че ако има различен символ от " " (space), то той ще бъде част от число. Итерираме външно по целия ред и вътрешно по всички символи, които не са space, знаейки че като дойде space ще свършва числото. Остана да проверим само каква част сме итерирали (от къде до къде) от реда, за да може чрез функцията subString да извлечем това число и да сме спокойни, че ще може да се parse-не.
Важните моменти са, че трябва да пазим маркер, чрез който да актуализираме къде е свършвало предходното число и респективно къде ще започва следващото и да внимаваме, ако дойде края на реда подаден на входа.
@andy Страхотно, благодаря за обяснението! Иначе докато решавах една друга задача от домашното, попаднах на насоки за използване на някои методи от Character class от менторите, които мисля са доста полезни, поне за мен бяха за решението на задача 13 от домашното Java Character Class - Javatpoint Но я реших след като го предадох за съжаление
@medon3 Избягвах да ползвам статични методи на Character, като например Character.isDigit(…), който би бил полезен, но представи си имаме число от редицата, което е отрицателно, например “3 12 -2 3 -10 2”. В такъв случай функцията на Character, която проверява дали дадения символ е цифра, ще изгърми на знака минус или най-малкото ще индикира, че това не е число, а пък то е част от числото. Тези проблеми ще expand-нат много логиката на задачата, за това ги избягвах. Реално условието на задачата, че ако не е space ще е част от число ни помага доста.
Да, така е, тези методи крият рискове, но понякога спестяват писане, аз ги използвах най-вече за задачите от серията Word or Number, които могат да се решат и по други начини разбира се
Имайки предвид, че задачата е от урока за цикли и масивите не са преподадени, дали е правилен подход да се тръгва към решение със същите. Да, най-вероятно така е по-лесно да се достигне до решението на проблема, но според мен идеята тук е съвсем друга.
Съгласна съм, аз лично предадох в домашното решение с масиви, защото нямах достатъчно време да обмисля задачата на спокойствие (вината за това е изцяло моя), после я реших и със Стринг - постнах го по-горе, други колеги също споделиха решения без масив