Loading...
Filkolev avatar Filkolev 4482 Точки

C# Basics May Homework 5 - Bits Killer (Problem 17)

Здравейте, 

Опитах да реша последната задача от 5-тото домашно; това е реално задача 5 от C# Basics Practical Exam (14 April 2014 Morning).

Имам време да я мъча, но ми е интересно какво точно не е наред с решението, което опитах днес.

Стори ми се сложно да решавам задачата с битови операции и реших да позлвам string. 

Какво реално правя: 1) вземам числата, които подава системата; 2) обръщам ги в двоична система и добавям нули отляво, за да направя дължината на стринга 8; 3) добавям всяко така стрингосано число към един голям стринг, накрая този стринг ще съдържа всички входни байтове в двоична система и най-много ще има 800 символа (до 100 байта по 8 цифри); 4) минавам през всеки елемент от стринга и го добавям към нов стринг (резултатът), като просто пропускам тези символи/битове, които трябва да "убием"; 5) ако дължината на новия стринг не се дели на 8, добавям необходимия брой нули отдясно; 6) разделям стринга на части с дължина 8 символа, обръщам ги в числа и ги печатам на конзолата.

Алгоритъмът работи с дадените в задачата примери, но в Judge ми дава 3 грешни отговора (81/100) и зациклих в опитите си да разбера къде точно бъркам. Нужна ми е друга гледна точка; ще съм благодарен ако може да помогнете.

КОДЪТ

Тагове:
1
Programming Basics
a.angelov avatar a.angelov 1316 Точки
Best Answer

На първо време може да видиш входните и изходни данни на тестовете, при които имаш грешни отговори - има ги публикувани в страницата на курса.

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

1
Filkolev avatar Filkolev 4482 Точки

Мерси много! Не знаех, че в тия папки ги има всички тестове; мислех, че са само условия и авторски решения. Обикновено сам се досещах къде греша, но в случаите, когато не можех, се ядосвах, че не мога да проверя точно в какви случаи се дъни кодът ми. Вече знам какво да правя в такива случаи.

В конкретния случай, оказа се, че програмата ми не работи добре, когато стъпката е 1. С няколко добавени реда вече всичко е ОК и трите грешни отговора са коригирани.

P.S. А защо не мога да заключа темата? Предполагам като автор би трябвало да мога.

0
dentia avatar dentia 362 Точки

Фил, теми се заключват само от модератори. Иначе е много приятно да можеш да си провериш тестовете, за жалост на изпита няма да имаш тази възможност. С още няколко (десетки задачи) ще свикнеш да се сещаш за граничните условия и без тях. :) Яко четене и "копане" му е майката. :)

2
Lamms avatar Lamms 197 Точки

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

Как трябва да се запише, за да работи с такъв или подобен иф?

if ((index % step == 1) || ((step==1) && (index==0)))

и да работи правилно и за зададено step 1.

 

А вторият ми въпрос е защо, когато се въведат данни 1, 1, 255, връща резултат 128. Моята програма също връща толкова, но не мога да го осмисля защо не е 254.

255 = 1111111, добавяме нула и да стане 11111110 = 254

 

Ще съм балогадарна, ако някой отговори поне на втория ми въпрос.

0
31/07/2015 21:21:23
lamarinov avatar lamarinov 11 Точки

Защото не убиваш само един бит 11111111, а всички след него със стъпка 1. И така удебелените единици си заминават 11111111 и се добавя 7 нули 10000000, което е точно 128.

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