[C# 2] Exam Multiverse Communication проблем с решение


1
http://pastebin.com/TwDHUYVA Хора това ми е кода използвам system.numerics; и въпреки това, в теста на бгкодер-а ми дава само 52 от 100.Проверих задачата въведох примерните стойности и работи нормално.

в C# Advanced от nf0rce (0 точки)


Отговори



1
Здравей,
Интересен начин за решаване. Според мен ще е от полза да измислиш малко по-отимизиран вариант, тъй като в този май има доста моменти за грешка.
Това настрана. Не ти дава пълен брой точки, защото на 35 ред си объркал при преписване на думата. Трябва да е ИИА вместо ИЛА.

от lostm1nd (846 точки)


0
мерси много.Целия алгоритъм прегледах игледах , а то къде било мерси.

от nf0rce (0 точки)


0

Ще пусна едно решение и от мен поради факта, че скоро ще започнем да решаваме тези задачи като подготовка за изпита.

http://pastebin.com/cTXx6p3h


от victor.velchev (1225 точки)


0
Едно решение и от мен: http://pastebin.com/bUkmeREi
Взимам инпута, минавам го буква по буква и взимам всеки 3 букви (които са число) в масив. После преобразувам от 13тична като сравнявам числата от инпута, с масив в който си пазя 13тичната бройна и взимам индексите на всяко число за да го обърна към десетична.

от stefanov2081 (40 точки)


1

Ето и едно решение от мен сътворено за около 20 минути. Задачата е доста лесна и решението ми използва изцяло наученото на лекцията за броини системи. Как да взимам по няколко числа със substring, как да преобразувам между броините системи и как да преобразувам по прост начин числата A,B,C... в броините системи по-големи от десетична в десетична.
Решението ми е просто, първо си разделям подадения стринг на substring-ове, всеки от който с дължина 3 символа. От там със switch case вземам тези 3 символа и ги Append-вам към StringBuilder класа в 13-тична бройна система. Полученото използвам в друг метод, където преминавам от 13тична към 10тична бройна система като натрупвам получените числа към сбора на 1 long по обичайния метод. Най-последното число умножено по основата на бройната система на степен 0,1,2... Тук използвам и трети метод, в който прехвърлям A,B,C в съответно 10,11,12.

http://pastebin.com/wU5RmHtJ


от hrist0.stoichev (1121 точки)


0
Много хубаво решение, благодаря за идеята със switch-a. В метода WordSeparate цикълът трябва да върви до края на input-a, a не до input.Length-3, защото така изпускаш последната тройка елементи. Тествах с TELERIK-ACADEMY и резултатът е 1798, докато при for (int i = 0; i < input.Length; i+=3) дава резултата от примера - 17984. Освен това няма нужда да минаваш през 16-чна бройна система, според мен в примера е написано 3В за заблуда :)

от milenasp (60 точки)


0

Здравейте ! Не мога да определя задачата като трудна, но пък не мога и да разбера защо получавам 60/100 в bgcoder. Имам пропуск, който не забелязвам. Явно ми се спи. Ето и кода: http://pastebin.com/GX36Q4vT

 


от IvoPN (10 точки)


0
MathPow() бърка при големи цифри. Само добавих един кратък метод за ръчно вдигане на степен и решението ти хвана 100 т. Ааа, и смених BigInteger с long, защото за тази задача е достатъчно. Ето и променения код: http://pastebin.com/AdmmTDhT

от stoianpp (415 точки)

0
Разгледах няколко решения и ми направи впечатление, че повечето смятат степeнта ръчно. Предполагам, че тази грешка е свързана с грешката при пресмятане на числата с плаваща запетая, а и като цяло аритметиката с реални числа е доста по-бавна от тази с цели. Явно там ми е гърмял кода. Благодаря за отговора и успех !

от IvoPN (10 точки)



2

Колеги, ползвайте .Substring - това е най-ясното решение. Припомнете си и какво сте учили за бройните системи.

Не ми се пише алгоритъма, но моето решение щеше да е нещо такова (разглеждайте го като псевдокод, вевроятно ще има грешки):

input = console.readline();

result = 0;

while(input.lenght >0)

{

result = result*13;

result = result + decode(input.substring(0,3));

input.remove(0,3);

}

вече как ще реализирате decode метода... ваша си работа. Аз лично бих ползвал или масив от стрингове и да търся с indexof, или със switch, или бих направил един стринг съдържащ всички групи от 3 знака и с indexof/3...

Искам само да ви обърна внимание 2 неща в реализацията на обхождането на стринга. Първата е за взимане на парче от стринга. Тази технология е най-защитена от грешки. Взимаш едната тройка, обработваш я и я изтриваш. После отново работиш със същата променлива, в която вече има "подкрастрения" стринг.

Втората е shift-ването на резултата. Винаги почвайте от най-старшия разред, и умножавайте резултата по основата преди да добавите новата стойност. Правете точно това, което правите с 10-тичните числа. Примерно: имате числото 482

4 -> shift -> 40 -> add -> 40+8=48 -> shift -> 480  -> add-> 480+2 = 482.

Пример:

input="AAABBBCCC"

result = 0;

step1:

result =  0*13;

result = (0*13)+1; (=0+1=1)

Input ="AAABBBCCC"

step2:

result =  1*13;

result = (1*13)+2; (=13+2=15)

Input ="AAABBBCCC"

step3:

result =  15*13;

result = (15*13)+3; (=195+3=198)

Input ="AAABBBCCC"

 

 


от JulianG (5316 точки)


1

Едно решение от мен с Речници. Естествео може и без тях, но е по кратко така.

Един съвет при такива задачи в които имате много вход който трябва да си hardcode-нете в програмата, за да не допускате грешка може да използвате примерно ексел и да си оформите входа като табличка. Ето тук съм направил шаблон, който е стествено може да се пригоди и за други ситуации.


от dimo.petrof (2887 точки)


0
http://pastebin.com/uZ4JDaXe- четем първите два символа и търсим на кое число отговарят. Намереното число запазваме в лист, който в последствие преобръщаме в число .Може да си спестим вкарването в лист, но ми се струва че няколко стъпки се правят наведнъж и това обърква.

от geniusvil (192 точки)


0

В моето решение, използвам StringBuilder, за да създам триплетите и след това ги сравнявам с масив от дадените триплети; използвам индекса в масива, за да взема правилното число от друг масив, отговарящ на числата в 13-тична система и след това вдигам числата на съответната степен.


от gradev (1661 точки)