Loading...
Lyubo avatar Lyubo 172 Точки

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

Това е решението ми на 6 задача.

Това е решението ми на 8 задача - Просто число.

Това е решението ми на 15 задача.

Това е решението ми на 16 задача.

4
Samuil.Petrow avatar Samuil.Petrow 1550 Точки

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

За това са т.2 и т.4 от новосъздадените правила, щом вече ги имаме, малко по малко е редно да ги спазваме. Една от двете теми не би трябвало да съществува и съдейки, че в онази има доста информация и постове вече написани, смятам, че тази не е на място. 

Отново - поздрави на автора за труда му, не искам да го омаловажам :)

3
ScreeM avatar ScreeM 19 Точки

Колега, Lyubo. Би ли обяснил решението си на 8-ма задача и най вече следното: else
{
for (int i = 2; i < number; i++)
{
if (number % i == 0) isPrime = false;
}
}

Не разбирам как така с тези редове правиш следното: it is divisible without remainder only to itself and 1.

Благодаря предварително и поздравление за успешно решената задача!

0
ZvetanIG avatar ZvetanIG 907 Точки

Задача 8 в конкретния случай ти е вярна, защото числото трябва да е не повече от 100, но например няма да работи ако я тестваш с 121. Също и с други числа, които се получават от произведение на прости числа по-големи от 10.

Щом си направил проверка дали се дели на 2, не е нужно да правиш проверка и за  4, 6, 8, и 10.

Както след проверката с деление на 3 не е нужно да се прави проверка с  6, 9.

1
mzografski avatar mzografski 189 Точки

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

1
ScreeM avatar ScreeM 19 Точки

Колега, mzografski. Пробвай да напишеш числото 13 и ще ти излезе: Please, enter valid integer.. Мисля, че не трябва да е така, но не знам къде ти е грешката.. Успех :)

0
HPetrov avatar HPetrov 822 Точки

На 10-ти проблем ако x = 2 и y = 1 ще ти даде грешен резултат защото позицията е в кръга но лежи на горната страна на правоъгълника.

3
mzografski avatar mzografski 189 Точки

А след като е на горната страна на правоъгълника не е ли и е него? За мен е и проверката би следвало да е правилна ако проверяваш с <= и >= спрямо координатите на правоъгълника ( в случая  -1 <= х <= 5 и -1 <= у <= 1).Поне аз така съм го направил.  Всъщност да. Прав си.

0
G.Burlakova avatar G.Burlakova 36 Точки

Това е моето решение на 10 задача. След дълго умуване. :D Ако дава грешки, моля пишете.

2
HPetrov avatar HPetrov 822 Точки

Малко не ми стана ясно защо задаваш -100 стойности на x и y координати и после правиш изваждания но това е сигурно защото не съм проверил линка, който си представила :) Ако ти работи логиката за окръжността значи не би трябвало да имаш проблеми и с другото понежа там са ти правилни проверките. Ето моето решение. Нека не те плаши ще е малко по дълго - просто правя доста проверки и като цяло съм се унесъл да проверявам координатите ми къде са точно за всеки случай, ако ми потрябва :P

3
G.Burlakova avatar G.Burlakova 36 Точки

-100 и -100 са последните стойности от таблицата с условието, за които дава "No" - просто последно с тях съм проверявала програмата и затова те са останали. А изваждането после - да, правя го заради това в линка, на който попаднах в Интернет. Т.к. в задачата, която е само за окръжност, радиусът е (0, 0) няма проблем, но в 10-та радиусът е (1, 1) и тогава при използване на Питагоровата теорема за проверка дали точката е в окръжността без изваждане на координатите на центъра ще даде грешен резултат. Хич не ме бива в обясненията и май стана объркано, но от линка ще се види. :D И благодаря за решението сега ще видя и ти как си го направил.

1
ZvetanIG avatar ZvetanIG 907 Точки

Може ли да обясниш, какво точно правиш в 15 задача?

0
kasskata avatar kasskata 492 Точки

утре ще пиша че едва съм се прибрал от залата че ми е мноооого далече и се изморих :)

Но по принцип горе долу ще обесня;

в цикъла за въртам 3 пъти за всеки бит поотделно 

mask = mask << k;

//маска с К позиция
bit1 = (mask & number) >> k;

бита е получен и 

mask = mask >> k;

връщам К позициите
mask = mask << p;

маска за P
bit2 = (mask & number) >> p;

взимане и въщане на P позиции
mask >>= p;

>>=е същото като при К "mask = mask >> K"

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

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

доста време ми отне този цикъл зашото трудно се прави такъв

(byte i = 1; i <= 3; i++, k++, p++)

 

Проверката е малко сложна за обяснение и доста я пригаждах с времето, но идеята и е да се знае дали бита който оглеждаме е различен от първия оригинален и ако е 1 да се направи нова маска(за да не се превръща числото в грешно(идеята я взех от един приятел много голем гуру на C#))Тази последна проверка ВЛИЗА в цикъла което е за всяка стъпка

if (bit1 != bit2)

{
if (bit1 == 1)
{
number1 = number | (mask << p);
number = number1 ^ (mask << k);
}
else
{
number1 = number ^ (mask << p);
number = number1 | (mask << k);
}
}

Това е обяснение горе долу към 16 задача която всъщност е решението и на 15 задача където сме спестили само този цикъл,защото там не се иска повтаряемост.А задачата е абсолютно същата :D Има малки разлики но не ми стигнаха нервите с тези бинарни пресмятания много гадни са честно

Дано съм помогнал и пишете ако има нещо

 

3
ZvetanIG avatar ZvetanIG 907 Точки

Благодаря ти за отговора.

Разгледах задачата ти. Това с оператора "^" наистина е хитро.  Но смятам, че разменяш битовете на позиция 4, 5, 6 с 25, 26, 27 вместо  3, 4, 5 с 24, 25, 26.

Може би първоначалните стойности трябва да са ти

        byte k = 2;
        byte p = 23;

 

0
kiko144 avatar kiko144 795 Точки

Колеги ето моето решение на 14-та задача. Мисля, че е оригинално. Използвал съм малко побитови операции и малко логика:) Сега започвам да се мъча с 15 и 16. Ако успея ще ги публикувам :) 

2
micev avatar micev 59 Точки

добре си се сетил .БРАВО !!!

Само, че може да махнеш първия if 

Аз така го направих

if (((mask & n) == 0) && v == 1)
{
n += mask;
Console.WriteLine(n);
}
else if(((mask & n) == 1) && v == 10)
{
n -= mask;
Console.WriteLine(n);
}
else{
Console.WriteLine(n);
}

 

1
ZvetanIG avatar ZvetanIG 907 Точки

Решението на задача 16.  Може да е от полза на  някой. Варианта е напълно завършен.

1
Lyubo avatar Lyubo 172 Точки

Решението е настина хубаво, хареса ми. Препоръчвам ти само да добавиш PadLeft(32, '0') за да изведеш правилно резултатът, на 3-тия тест не извежда първата 0. На 6-тия тест гърми, за да мине теста трябва да смениш на 8 ред uint с long, и на 34 ред да кастнеш long към uint.
      

1
ZvetanIG avatar ZvetanIG 907 Точки

Благодаря ти, ще погледна нещата отново!

Но не съм съгласен с използването на long вмест uint   защото в условието е казано, че числото е положително 32-битово, а  типа  long е за 64-битови числа. 

Последния тест в условието сигурно е сгрешен. Там трябва да има за вход само 32-битови числа.

0
ZvetanIG avatar ZvetanIG 907 Точки

(number & (~mask)) | ((firstBitGroup << q) | (secondBitGroup << p)

Нулирва позициите, които ще се разменят, след което поставя съответно firstBitGroup  на позиция q и  secondBitGroup  на позиция p.  

Надявам се правилно да съм разбрал решението?

Страхотен подход, към задачата.  Браво!

0
Lyubo avatar Lyubo 172 Точки

Добро и кратко решение. Имаш проблем на 3 и 6 тест. Входящият номер трябва да е long за да събере "33333333333", на 31 и 32 ред ще трябва да кастнеш от long към uint. За да мине 3-ият тест, промени if (Math.Max(p, q) + k > 31) на "32". Може да махнеш return, излишен е. Вторият if ти препоръчвам да направиш на else if, и на краят да сложиш един else който да съдържа for-а, резултата и т.н.

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