Задача 11 Array Manipulator от Методи
Здравейте,
Докарах задачата до 80/100 точки, ако на някой му се занимава да открие грешката. Нарочно направих задачата по дългия начин, за да видя дали ще се получи.
Условие: https://softuni.bg/trainings/resources/officedocument/37892/exercise-technology-fundamentals-with-csharp-january-2019/2237
Решение: https://pastebin.com/gx5qNsNu
Здравей,
Съжалявам, че те изпотих яко :)
Изненадан съм, че някой е открил проблема и е положил толкова усилия да ми гледа кода. Самият аз не се сетих за случая, в който имаме нула, която трябва да се отпечата без да се реже излишно. Благодаря много. Иначе чак днес взехме лекцията за листове, с които задачата се решава много готино. Нарочно не исках да ги ползвам.
Наистина дава 100/100.
Здравейте,
след 2 дена лутане по това парче код реших най-накрая да питам защо трябва брояча на фалшиви нули да започва от 0 - "истинските нули"? Какво постигаме с това? - да намерим дължината на новия масив без фалшивитие нули ли? Ако е това правя го по друг начин, защото повече го осмислям от това от 0 да извадя истинските нули, но в Judge гърми, а двата резултата са равни при тестовете.
Решението, което дава 100/100 в Judge - https://pastebin.com/BKHQCv98
Решението, което дава 50/100 в Judje - https://pastebin.com/JHUSKjRp
Проблема е ето тук. Има нещо в ей това парче код
int fakeZeroCounter = 0 - zeroDigitCounter;
for (int i = 0; i < temp.Length; i++)
{
if (temp[i] == 0)
{
fakeZeroCounter++;
}
}
int[] finalArr = new int[temp.Length - fakeZeroCounter];
for (int i = 0; i < finalArr.Length; i++)
{
finalArr[i] = temp[i];
}
//temp = finalArr;
Console.WriteLine($"[{string.Join(", ", finalArr)}]");
което се различава от моето
int counterOfFakeZeroes = 0;
for (int i = 0; i < temp.Length; i++)
{
if (temp[i] == 0)
{
counterOfFakeZeroes++;
}
}
int realZeroes = counterOfFakeZeroes - zeroCounter;
int ArrWithoutFakeZeroesLength = realZeroes;
int[] ArrWithoutFakeZeroes = new int[ArrWithoutFakeZeroesLength];
for (int i = 0; i < ArrWithoutFakeZeroesLength; i++)
{
ArrWithoutFakeZeroes[i] = temp[i];
}
Console.WriteLine($"[{string.Join(", ", ArrWithoutFakeZeroes)}]");
и ненамирам какво е.
Идеята е да намерим първо колко "реални" нули има в входния масив. След това от всичките нули на масива, който пази само четните числа с подаден размер "count", трябва да се извадят първоначално преброените т.е. "реални". Така правим нов масив с размер на получената разлика, в който презаписваме от елементите на масива, който пази само четните числа и ги принтираме. Това ли е идеята на това парче код или тотално греша?
Моля за помощ и се надявам да не се поти никой :)
Ето и условието на задачата:
1.*Array Manipulator
Trifon has finally become a junior developer and has received his first task. It’s about manipulating an array of integers. He is not quite happy about it, since he hates manipulating arrays. They are going to pay him a lot of money, though, and he is willing to give somebody half of it if to help him do his job. You, on the other hand, love arrays (and money) so you decide to try your luck.
The array may be manipulated by one of the following commands
Input
Output
Constraints
Input
Output
1 3 5 7 9
exchange 1
max odd
min even
first 2 odd
last 2 even
exchange 3
end
2
No matches
[5, 7]
[]
[3, 5, 7, 9, 1]
Input
Output
1 10 100 1000
max even
first 5 even
exchange 10
min odd
exchange 0
max even
min even
end
3
Invalid count
Invalid index
0
2
0
[10, 100, 1000, 1]
Input
Output
1 10 100 1000
exchange 3
first 2 odd
last 4 odd
end
[1]
[1]
[1, 10, 100, 1000]
Здравейте,
Благодаря, насоката за 0те ми помогна от 80/100 да получа 100/100.
Пробемът при мен беше, че задавах предварително масив и като не го напълвах с данни принтирах 0-и, заради което премахвах 0те. И от там не принтирах 0-и за четни числа като от примера { 1, 0, 0, 1 }.
Това е моето решение (не е особено елегантно...): https://pastebin.com/qdzBCQ5q