Loading...
t.316 avatar t.316 137 Точки

[Exam Problems] C# Basics - Problem{5} - Game of Bits

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

Не мога да разбера какъв е проблема с решението ми на задача Game of Bits. Дава ми 25 точки. Ще съм много благодарен, ако някой може да ми каже какво точно не е наред.

Ето го и кода: http://pastebin.com/pXpzfcVW

Условието може да намерите тук: https://judge.softuni.bg/Contests/Practice/Index/78#4

 

Тагове:
1
Programming Basics 05/07/2015 14:10:19
KatyaMarincheva avatar KatyaMarincheva 572 Точки
Best Answer

Здравей Тодоре,

решението ти има успешна начална посока, има само още няколко подробности, които можеш да вземеш предвид за да получиш пълните 100 точки от judge:

  • The minimum number of commands is 1.

И тъй като последната команда винаги е Game Over!, значи ако получиш само една команда - тя ще бъде точно Game Over!, т.е. проверката за Game Over! трябва да стoй най-отгоре в while loop-a, преди всичко друго.

number = ReverseString(number); е добре да го приложиш само два пъти: преди и след while loop-a, защото

  • The maximum number of commands will be 30., т.е. за всичките евентуално 30 конади ни трябва стринга да стои все reversed, и само след като приключим с командите можеш да го обърнеш за да го превърнеш в число.

Последният детайл е, че Convert.ToUInt64(number, 2); не работи с празен стринг, ако входа е едноцифрено число или на определен етап е сведен до едноцифрено число, и последната команда е Even - финалният стринг остава празен, защото едноцифрените числа нямат четни позиции. Затова можеш да предвидиш една проверка:

uint print = number.Length == 0 ? 0 : Convert.ToUInt32(number, 2);

С тези допълнения решението ти дава 100 точки в judge.

1
t.316 avatar t.316 137 Точки

Здравей, Катя!

Направих промените, които ми каза. Ето го код: http://pastebin.com/cTJPpFrY

Може би нещо пропускам или не съм разбрал правилно от обяснението ти, но отново ми дава 25 точки.

1
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей Тодоре,

В решението ти вече всичко си е точно и си дава 100 точки - имаше малък проблем само който идваше от разместването, след което не са променени имената на променливите:

на 29-ти ред казваш: newNumber = string.Empty;

а на 33-ти и 35-ти ред търсиш индекси из празния стринг: for (int i = 0; i < newNumber.Length; i++), if (newNumber[i] == '1')

просто на 33-ти и 35-ти ред трябва вече да работиш с number, а не с newNumber, защото number ти е крайното число - но това не е логическа грешка а само разсеяност, която била признак на гениалност :) Означава че си програмист :)

 

0
t.316 avatar t.316 137 Точки

Здравей, Катя!

Така вече работи идеално.

Много ти благодаря за помоща и за милите думи!

1
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здрасти пак :)

Да, решението работи деално, а и доста разнообразен синтаксис си опитомил в него.

Сега като следващ етап - може да разгледаш как може да се реши задачата с побитови оператори - защото в повечето изпитни задачи не могат да бъдат заобиколени.

На този линк съм "пообезобразила" авторското решение - т.е. само съм му прибавила печатане на binary representation на всеки етап от превръщането на числото, за да е по-зрителен резултата.

0
veso.tinev avatar veso.tinev 1 Точки

Привет,

Също се нуждая от помощ за играта на битове.

На този код http://pastebin.com/bLVPrWhE ми дава само 25 точки, като най-дразнещото е , че според него на нулевия тест (3586153387 от условието скоманди пак оттам Odd ->Even-> Game Over) кодчето дава 0 -> 0, а като си го пусна през дебъгера си ми дава исканото 232 -> 4

Отделно аз ли нещо бъркам, но не виждам в авторското решение проверка за макс. 30-те команди от условието.....

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