Добър Ден! Имам проблем със една от задачите в Loop категорията на C# fundamentals курса. Не мога да намеря къде има проблем в кода и бих бил благодарен ако някой има някаква насока. Прочетох всичко хиляда пъти, работи с примерните тестове и не мисля че имам някакъв проблем с логиката на задачата. Пробвах с различни int types, BigInteger, ulong. Същата работа навсякъде. Мерси предварително! https://pastebin.com/prDRpnDa
Здравей, Виктор,
Може ли да споделиш и условието на задачата?
Поздрави,
Атанас
Odd and Even Product
Description
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.
Input
- On the first line you will receive the number N
- On the second line you will receive N numbers separated by a whitespace
Output
- If the two products are equal, output a string in the format “yes PRODUCT_VALUE” , otherwise write on the console "no ODD_PRODUCT_VALUE EVEN_PRODUCT_VALUE"
Constraints
-
N will always be a valid integer number in the range
[4, 50]
- All input numbers from the second line will also be valid integers
Sample tests
Input | Output |
---|---|
5 | |
2 1 1 6 3 | yes 6 |
5 | |
4 3 2 5 2 | no 16 15 |
Заповядай! =)
А може ли да споделиш какво точно ти гърми (като тестове), когато я събмитнеш за оценяваме, защото прегледах кода ти и не открих нещо, което може да е причина да не минава задачата?
За всеки случай можеш да си направиш една променлива, на която да присвоиш броят на очакваните числа и да опиташ да въртиш цикъла до нея, въпреки, че не би трябвало това да е проблем, но все пак…
Буквално 4 от 5-те инпута към които тества не минават… минава само 1 и нямам грам идея защо. Проверих броя на очакваните числа също, всичко е точно. Точно за това реших да пиша във форума, понеже буквално не виждам къде може да е има проблем
A какъв output ти връща за тези 4ри теста?
Здравей, пробвай с if (i % 2 == 0) , вместо if ((i + 1) % 2 == 0).
Няма да има разлика, просто ще бъдат обърнати Even and Odd, резултата ще е идентичен =)
Опитай да стартираш цикъла от 1 до <= array.Length и промени if statements:
- (i % 2==1) --> odd
- (i % 2==0) --> even
Ако започне директно от 1 пропуска първия елемент от array-a и резултата няма как да е верен. Не мисля че проблема е в логиката за кое кога е четно или нечетно. Логиката на кода ми е точно както е в условието, проблема си мислех да не е нещо откъм размера на самите integers, но пробвах какво ли не
Решението на Петър Стоянов дава 1:1 отговор като моето а на Атанас дава invalid return на всички.
Това вече е хубава грешка, ако смениш int на BigInteger и това решение ще ти даде 100/100
Продължава да си е invalid return, каквото и да го правя. Не мисля че разликата между инт и BigInt би давала invalid return. Ако разбирам като хората системата invalid return е примерно ако очаква string в даден формат, а не получи точно този формат. Ако стойността на int-a беше проблема щеше да даде директно просто грешен отговор, не invalid return
Първата ти променлива N не я записваш никъде, просто прочиташ реда. Според мен е възможно и това да е причина да не ти го приема. Другото нещо е в if стейтмънта ти, когато добавяш единица към i, не минаваш през целия масив.
Проблемът е долу при печатането на резултата. Просто можеш да размениеш променливите. Извинявай, в бързината съм пропуснал да ги разменя! Ако и тогава не се оправи с интерес можем да продължим на лично
Добавям 1 към i-то само в теста. Самия i variable си стои същия. Добавянето на единица към i е малко излишно да, можех да ги обърна 2-та % теста понеже в условието се казва че първия елемент е нечетен, следващия е четен и т.н. Просто като добавя 1 към i-to при положение че започвам от 0 луупа първия въпреки че щеше да излезе четен го кара да излиза нечетен. (буквално можех просто да обърна 2-та теста и щеше да е по-ясно, съгласен съм). Не записвам никъде N понеже не я ползвам. На втория ред получaвам N броя числа така или иначе и след като ги разделя със String.Split дължината на array-a е равна на N така или иначе. Просто сложих там този ред код за да не се оплаква judge системата.
Няма грешка в кода ти като сравнявам със тестовите. Като на моя компютър подкарвам този код работи точно както моя и вади идентичен резултат на примерните тестове. Мисля че нещо с Linq и $ оператора не се харесват с judge-a. Може да използват по-стара версия на .NET и да не поддържа някой от по-новите неща. Така или иначе сега точно ще отивам на работа, та мисля за сега да приключа главоболията, надявам се някой които е по-навътре със самата judge система поне да насочи къде точно е проблема ни! Така или иначе благодаря за опитите, да се надяваме ще бъде разрешено скоро