[C#] Домашно Multidimensional Arrays - 4 задача


1

Условие: Write a program, that reads from the console an array of N integers and an integer K, sorts the array and using the method Array.BinSearch() finds the largest number in the array which is ≤ K. Решениеsource.

Обяснение: Първо сортираме масива с Quick Sort от миналото домашно, след това извършваме двоично търсене, като взимаме граничните случаи предвид. Накрая отпечатваме индекса на елемента и неговата стойност.



Отговори



1

Ето и моето решение :

http://pastebin.com/HjLgbACS


от streetboyyy (78 точки)


0

И от мен едно: http://pastebin.com/Z9XFHCQq


от nina75 (60 точки)


0

не съм много сигурен дали съм я решил правилно така че се допитвам до вас

исках да напиша нещо малко по-различно от вас :P

http://pastebin.com/NRqtzFnq


от kassskata (128 точки)


0
Струва ми се, че не си разбрал как точно работи този метод. Ето една тема от SO, където е добре обяснено. http://stackoverflow.com/questions/11436152/array-binarysearch-return-value

от stinger907 (307 точки)

0
това го видях още в началото на темата и го разбрах добре . ако не съм го разбрал нямаше да напиша задачата така if (indexK < array[0]) или пък се бъркам нещо...

от kassskata (128 точки)



0
Здравейте,
Ето това е моето решения, вероятно се повтаря с това на някой друг:
http://pastebin.com/F4BvSBgu
Това, което ме дразни е следното: нали например:
indexOfK = Array.BinarySearch(unsortedArray, numberK) -> връща (ако няма число равно на К) индекса на следващото по-голямо от К.
Да де, ама като разписвам indexOfK ми подава +2 индекса след следващото число.
Например:
матрица= 2,3,8,9,12 и К=5
Стойността на indexOfK=-3, а не би ли трябвало да е -2 !?
Затова ми се налага да пиша (-index-2) вместо -1
Не че е някакъв проблем но ме дразни че не знам защо е така.
Явно е и много късно,
Благодаря за вниманието.

от b_ivanov (53 точки)


0
И аз до сега същото се чудех , но това , което ти връща като число ... там минусовото е доколкото разбрах побитово и ако го обърнеш със ~(index) - 1; ще ти върне коректната позиция в масива (поне при мен проработи така). Самата логика предстои да си я изясня.

от Ob1To (40 точки)

0
Правилно ти връща -3, защото ~(-3) == 2; И те съветвам да използваш Syntax Highlighting в PasteBin, ако искаш повече хора да ти обърнат внимание на кода.

от stinger907 (307 точки)



0

Здравейте, сблъсках се с проблем подобен на колегата @  b_ivanov поразрових се и изтествах метода BinarySearch() със следния код http://pastebin.com/yePyZuVc и следния вход  и съответно получените резултати:

input 
n = 3
-1
7
9
k = 8
 
output 1 : index = -3
output 2 : index = 2
 
input
n = 7
-1
7
9
15
22
38
55
 
k = 21
 
output 1 : index = -5
output 2 : index2 = 4
 
Съответно при промяна в кода за output 2  на line 45
 
от int index = Array.BinarySearch(arrayNumbers, k);
на int index = ~(Array.BinarySearch(arrayNumbers, k));
 
Както се вижда при нечетен брой елементи в подадения масив integer value output - a на метода е "грешен"; затова внимвайте или по-добре използвайте
"~" оператора както правилно е коментирал колегата по-горе.
 
Реших че ще е по-четливо ако го постна като отделен answer  а не като коментар към отговора на колегата  b_ivanov.
 
Весели празници : )

 

 




0
Всъщност този "проблем" е подробно коментиран още на първа страница от темата, а и преди да се ползва даден метод, който не познаваме е винаги добре да се погледне и в MSDN: http://msdn.microsoft.com/en-us/library/2cy9f6wb(v=vs.110).aspx

от anilak (1134 точки)

0
Когато си пишех домашното първото нещо което направих беше да прочета в MSDN как работи метода, и все пак четейки не се сетих че "the bitwise complement" на 2 е -3, на, на 4 -5 и т.н. Също така, след като получих грешни резултати изчетах тази тема + различни отговори в stackoverflow и все още не бях си изяснил нещата на 100%. После, тъй като в нещата които прочетох примерите винаги бяха за 2 и -3, ми стана интересно какви резултати дава за други нечетни стойности. Направих си горепосоченият пример поразрвоих още малко в нета и ми "просветна". Накрая реших да споделя трудностите които аз изпитах, за да може ако някой Евентуално(подчертавам) се води по логика подобна на моята да го схване по-бързо. Мисля че това е целта на форума, а в случая отговра ми не е репост или повторение .... Така, че моля без подобни коментари все едно не съм си направил труда първо да потърся и после "да откривам" топлата вода.



0

Вариант само с цикли и if - ове   -->    http://pastebin.com/frgU5K2U


от kolchakov96 (237 точки)