15ти Проблем от 3то домашно - Решение до тук + въпрос.
Здравейте,
Исках да споделя обяснение на 15та задача. Написал съм малко по-подробно нещата за да може да е максимално разбираемо:
Исках да попитам следното. Понеже говорих с Наков относно задачата и той каза, че е по добре да се вземат трите стойности наведнъж и да се заместят. Дали някой знае как става? Array?
Иначе и горното решение работи, просто повторете кода три пъти за 3те размени и ще се получи.
Благодаря ви предварително!
P.S. - Пускам го в нова тема защото само така ще могат да го видят повече хора. Това е естеството на форумите. Който е бил в мега форуми като WarriorForum и подобни знае, че организацията е единствено и само по категории.
Здрасти Милен,
Разгледах решението ти. И аз бях написал доста реда код преди да стигна до моето последно решение, за което много ми помогна решението на 16та задача на "ybaltova" което е публикувано по-горе. Реших, че може да ти е полезно и го споделям :)
Ето линк към него:
LINK
Поздрави от от мен
Да AlexanderBeloev благодаря ти много.
Иснитаната е, че вашите решения са по-добри затоа днес се мъчих да реша 16-та задача по логиката, която вие сте следвали. И в крайна сметка успях, копнах решението на kiko144 и си го модифицирах за решението на 16 задача, не казвам, че е добро ама работи.
Успех от мен.
Здравей !
Харесва ми логиката на решението ти, на зад 16, но мисля, че можеш да го изчистиш още малко :)
Не съм убеден, че това работи коректно за всички случаи: else if ((numberQ - numberK) < (numberP + numberK)). Това е равносилно на numberQ - numberP < 2*numberK, което не го разбирам. Не вярвам да работи винаги коректно. Аз използвам |numberP - numberQ| < numberK. (става въпрос за покриването на случая за overlapping)
Този номер със стринговете и цикъла, който правиш: strMask = strMask + "1"; според мен може да го спестиш просто с реда uint unit = (1u << numberK) - 1;. Нали се търси число от вида 11111..., така k пъти. Това всъщност е числото 2^k - 1, а 2^k e 1000..., което е: 1<<k. Ето и моето решение на зад 16.
Съжалявам ама не знам какво е unit = (1u << numberK) - 1 ; по сокоро (1u), аз съм начинаещ и тези съкращения не ги разбирам, така че не знам сигурно си прав. :) за оверлапинга си прав, рябва само да е number Q - NuberP - numbnerK, при мен няма нужда от модул защото numberQ е винаги по - голямо от numberP поради проверката в началото на кода :) Благодаря за отговора.
С "1u" означавам единица от тип uint, а unit се е просто променлива (малко объркващо име). Логиката на решението ми налагаше да запиша единицата така. Иначе може и само 1. Просто имах впредвид, че (11111111...)2 = 2k-1 + 2k-2 + ... + 1 = 2k -1 - 1= (100000...)2 - 1 = (1 << k) - 1.