Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

SvetoslavPorozhanov avatar SvetoslavPorozhanov 4 Точки

Задача 11 Array Manipulator от Методи

Здравейте,

Докарах задачата до 80/100 точки, ако на някой му се занимава да открие грешката. Нарочно направих задачата по дългия начин, за да видя дали ще се получи.

Условие: https://softuni.bg/trainings/resources/officedocument/37892/exercise-technology-fundamentals-with-csharp-january-2019/2237

Решение: https://pastebin.com/gx5qNsNu

Тагове:
0
Fundamentals Module
iGeorg1ev avatar iGeorg1ev 223 Точки
Best Answer

Здравей,

Изпоти ме яко :) 

Проблемът е в метода, където търсиш първите еди-колко си четни. Така както си го направил работи до момента, в който н му зададеш нули в оригиналния масив. Например масив 1 0 0 1. Метода вижда 2те нули, но ги слага  в брояча за нули, който си му сложил с идеята да брои излишните елементи и след това реже два елемента от масива, който трябва да принтираш. Всъщност обаче тези елементи не са излишни а трябва да бъдат принтирани. Та за го оправих ето така:  https://pastebin.com/JUyKDeL0.

 

1. В първоначалния цикъл, където броиш четните съм сложил брояч на нулите от масива - "истинските" нули.

2. После брояча на "фалшиви" нули го правя да има начална стойност 0 - "истинските нули".

По този начин ако имаш две нули в масива( а те са четни елементи) брояча ти няма да ги изреже, а ще почне да реже чак като намери 3та нула и т. н.

 

Дано да си ме разбрал и да съм помогнал, защото е доста сложно като цяло :)

П.С. Дава 100/ 100.

Иво

 

 

0
SvetoslavPorozhanov avatar SvetoslavPorozhanov 4 Точки

Здравей,

Съжалявам, че те изпотих яко :)

Изненадан съм, че някой е открил проблема и е положил толкова усилия да ми гледа кода. Самият аз не се сетих за случая, в който имаме нула, която трябва да се отпечата без да се реже излишно. Благодаря много. Иначе чак днес взехме лекцията за листове, с които задачата се решава много готино. Нарочно не исках да ги ползвам.

Наистина дава 100/100.

0
Joro_Paspalev avatar Joro_Paspalev 23 Точки

Здравейте,

след 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

  • exchange {index} – splits the array after the given index, and exchanges the places of the two resulting sub-arrays. E.g. [1, 2, 3, 4, 5] -> exchange 2 -> result: [4, 5, 1, 2, 3]
    • If the index is outside the boundaries of the array, print “Invalid index
  • max even/odd– returns the INDEX of the max even/odd element -> [1, 4, 8, 2, 3] -> max odd -> print 4
  • min even/odd – returns the INDEX of the min even/odd element -> [1, 4, 8, 2, 3] -> min even > print 3
    • If there are two or more equal min/max elements, return the index of the rightmost one
    • If a min/max even/odd element cannot be found, print “No matches”
  • first {count} even/odd– returns the first {count} elements -> [1, 8, 2, 3] -> first 2 even -> print [8, 2]
  • last {count} even/odd – returns the last {count} elements -> [1, 8, 2, 3] -> last 2 odd -> print [1, 3]
    • If the count is greater than the array length, print “Invalid count
    • If there are not enough elements to satisfy the count, print as many as you can. If there are zero even/odd elements, print an empty array “[]”
  • end – stop taking input and print the final state of the array

Input

  • The input data should be read from the console.
  • On the first line, the initial array is received as a line of integers, separated by a single space
  • On the next lines, until the command “end” is received, you will receive the array manipulation commands
  • The input data will always be valid and in the format described. There is no need to check it explicitly.

Output

  • The output should be printed on the console.
  • On a separate line, print the output of the corresponding command
  • On the last line, print the final array in square brackets with its elements separated by a comma and a space
  • See the examples below to get a better understanding of your task

Constraints

  • The number of input lines will be in the range [2 … 50].
  • The array elements will be integers in the range [0 … 1000].
  • The number of elements will be in the range [1 .. 50]
  • The split index will be an integer in the range [-231 … 231 – 1]
  • first/last count will be an integer in the range [1 … 231 – 1]
  • There will not be redundant whitespace anywhere in the input
  • Allowed working time for your program: 0.1 seconds. Allowed memory: 16 MB.

 

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
YordanovPetar avatar YordanovPetar 0 Точки

Здравейте,

Благодаря, насоката за 0те ми помогна от 80/100 да получа 100/100.
Пробемът при мен беше, че задавах предварително масив и като не го напълвах с данни принтирах 0-и, заради което премахвах 0те. И от там не принтирах 0-и за четни числа като от примера { 1, 0, 0, 1 }.

Това е моето решение (не е особено елегантно...): https://pastebin.com/qdzBCQ5q 

 

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