Софтуерно Инженерство
Loading...
+ Нов въпрос
smu4k avatar smu4k 34 Точки

Homework - 09. Index of Letters - Array Exercises

  Здравейте,
може ли някаква идея да подадете за задачата от масиви "Index of Letters", тъй като нещо не ми е доизяснено в главата какво трябва да правя. Трябва да направя един отделен масив, с всичките букви  като те да бъдат елементи на него и да пусна фор цикъл който да обхожда този масив и да търси съвпадения и да казва, кой е индекса на елемента или е нещо друго.. тази задача ми изглежда лесно, така, че се извинявам :D за проявеното невежество!

Тагове:
1
Programming Fundamentals
alex1966 avatar alex1966 255 Точки

Има 2 начина да си хардкоднеш масива с азбуката или да си го напълниш с for цикъл, аз си го хардкоднах, правиш си 2 цикъла (ако въртиш 1 и за азбуката стават 3), и после една проверка: http://pastebin.com/DRA2wv9h

2
smu4k avatar smu4k 34 Точки

Мерси, умен сиии :))) Така си го представях и аз :)

1
30/05/2016 16:47:28
Simeon.R avatar Simeon.R 198 Точки

Идеята е, че в английската азбука има 26 букви и задачата иска да им дадеш номер, като започнеш от a = 0; b = 1 ... z = 25. Входът ще бъде само малки букви. 

Вариант е да обходиш всяка буква и да кажеш {буква} -> {номер}. По-трудната част е да се сетиш как да намериш номера лесно. Аз използвах ASCII таблица и свойството на char - да е едновременно символ и номер/число т.е. може да изваждаш/прибавяш числа към символи и да получиш символ/номер. Например буквата "a" е номер 97 в ASCII таблицата. Пробвай с тази подсказка :)

2
slav.petkov avatar slav.petkov 26 Точки

Здравейте, колеги,

като гледам вашите решения и на мен ми хрумна начин.

Получаваме азбуката във възходящ ред, тоест - сортирана. Има един метод за търсене, наречен Binary Search .

Накратко същността му се състои в следното:

  1. Имаме сортирана колекция от елементи и елемент, който търсим в нея.
  2. Имаме лява и дясна позиция, които ни формират затворен интервал за търсене, нека ги наречем left и right
  3. Изчисляваме индекса на средната позиция между left и right - middle = (left + right) / 2;
  4. Проверяваме елементът на индекс middle.
    - Ако е равен на елемента, който търсим, то тогава връщаме middle
    - Ако е по-малък от търсения елемент, то тогава  присвояваме на left стойност middle + 1 и изпълняваме стъпка 4
    - Ако е по-голям от търсения елемент, то тогава присвояваме на right стойност middle - 1 и изпълняваме стъпка 4.
  5. Ако не намерим този елемент, връщаме -1

Така в случая за всяка буква от инпута можем да намерим съответната ѝ позиция в масива.

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

http://pastebin.com/akyHFCKS

Поздрави!

0
30/05/2016 18:52:04
Lusien.GG avatar Lusien.GG 66 Точки

Колеги, ако ползваме Linq(щот гледам, че сте ползвали във вашите решения), има много по-лесен начин.

Array.IndexOf(array,obj);

Ето моето решение, ако е от полза на някого: http://pastebin.com/rhs8nshJ

 

1
30/05/2016 20:01:16
Sim0o0na avatar Sim0o0na SoftUni Team Moderator Trainer 547 Точки

pastebin.com/RUWCphRr <- намерила съм едно решение в интернет, което си работи, но ако някой успее да ми обясни тази част "[i] % 32 - 1" би било чудесно :D 

0
ralitsa_d avatar ralitsa_d 171 Точки

Много добро решение :)

"[i] % 32 - 1" ти дава индекса, който буквата щеше да има, ако беше част от масив с малките букви от азбуката.

Пример: 'а' - ASCII код 97 - 97 % 32 = 1 - 1 = 0. Ако имаш масив с буквите от азбуката, 'а' ще бъде точно на позиция 0.

2
Sim0o0na avatar Sim0o0na SoftUni Team Moderator Trainer 547 Точки

Супер. Благодаря ти :)

0
SvilenPavlov avatar SvilenPavlov 8 Точки

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

Първата ми мисъл беше да си направя указания азбучен масив и да сверявам според него. Но после се хванах за главата защото се усетих, че това е излишно и неефективно. Задачата се решава с 3 реда код:

Тук са и двете ми решения, разделени с ретърн;

  http://pastebin.com/eEc0hqSm

 

Доста странна задача.

0
pecbr avatar pecbr 4 Точки

Привет, ето и моето решение.. кратичко :) 

http://pastebin.com/qfNsA5Sk

0
ctelio avatar ctelio 0 Точки

Твоето ми хареса най-много, открадвам го:))

0
nikolaybelobradov avatar nikolaybelobradov 4 Точки

https://pastebin.com/yLU0bY2A - Ето с ASCII таблицата. :)

0