Решение на Домашно 07 от Основи на програмирането с Java - декември 2016
Дата: 25-ти февруари 2017
Отново ви привтствам да разгледаме решенията на задачите, да споделите вашите решения, да задавате въпроси, да си помагаме.
По-късно днес ще разпиша и разясненията по решенията.
Задача 01 ( Числата от 1 до N през 3 )
Решена на лекцията. Индексът i на цикълът for можем да го променяме с каквато стъпка/формула си искаме. Не е задължително да е стойността +1 или -1.
Задача 02 ( Числата от N до 1 в обратен ред )
Решена на лекцията. Въртим цикъл for наобратно. От n до 0, като намаляме индексът и проверяваме дали е стигнал 0.
Задача 03 ( Числа от 1 до 2^n )
Решена на лекцията.
Задача 04 ( Четни степени на 2 )
Решена на лекцията.
Задача 05 ( Редица числа 2k+1 )
Не помня на лекцията дали я разписахме с for или с while, но сега ще го разпиша и с for за да видите как постигаме един и същи резултат с различните цикли. алтернативно решение.
Задача 06 ( Число в диапазона [1…100] )
Задача 07 ( Най-голям общ делител (НОД) )
Задача 09 ( Сумиране на цифрите на число )
Задача 10 ( Проверка за просто число )
Задача 11 ( Въвеждане на четно число (с обработка на грешен вход) )
Задача 12 ( Числа на Фибоначи )
Задача 13 ( Пирамида от числа )
Задача 15 ( Генератор за тъпи пароли )
Много забавна задачка :)
Задача 16 ( Магически числа ) (леко променено решение)
Ами това е. Ако има нещо неясно питайте, ще обърна внимание на всеки. Публикувайте и вашите решения и нека ги обсъдим. И да не забравя.. поемам критики всякакви. Можем само да се поучим от тях ;)
първо да те успокоя и аз не го разбирам добре. нещото което направих е да потърся алгоритъм (не сорс код, а алгоритъм). и просто имплементирах алгоритъма с програмен код на джава. numC играе ролята на памет, запаметява стойността на b. правиш деление с остатък и записваш остатъка в b, а първоначалната стойност на b, която е записана в паметта numC я записваш в a. по този начин следващият път като завъртиш цикъла в делението с остатък делиш първата стойност на b с остатъка от a%b. един вид правиш деление с остатк с остатъка на входните(първите) числа. мисля че го казаха на лекцията, че програмистите не е нужно да изборетяват сами супер сложни алгоритми, които са отнели 100 години на математиците. нужно е ние като програмисти да можем да намерим алгоритъма и да го разпишем като програма. и тъй като евентуално остатъка от остатъка от остатъка... колкото пъти е нужно да се извърши операцията в един момент ще стане нула и за това не е безкраен цикъла и за това не ползваме break. математиците да си мислят сложните алгоритми, ние ще ги разписваме с програмен код. цикъла while ти си избираш дали да го въртиш до безкрайност и да го break-неш или да му зададеш горе условие което да го break-не. например в лекцията където правим хващане на грешки с try и catch (задача 11). там нарочно правим безкраен цикъл while(true) и в него е try/catch конструкцията, за да може като получиш грешка/изключение да не приключи програмата а да се върнеш в началото и да опиташ пак (try). и ако стигнем до последният ред на try, и нямаме грешка, с break чупим безкрайният цикъл while(true).
Много ти благодаря. "numC играе ролята на памет, запаметява стойността на b. правиш деление с остатък и записваш остатъка в b, а първоначалната стойност на b, която е записана в паметта numC я записваш в a" ето това изречение ще трябва да явно да си го набия в главата,защото ми звучи абстрактно,но на този етап ще го приема,че просто така работи :).
Иначе така и така сме тръгнали ето една идея (в случай,че искаш да изкараш директно последният резултат) по-различно решение на 8-а:
http://pastebin.com/WL4BbTxa
Разликата е в една дума,но понеже помислих,че Judge желае последната цифра от фактурела,затова така
Надявам се теи два линка малко да изяснят логиката на 7ма задача.
https://bg.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B9-%D0%B3%D0%BE%D0%BB%D1%8F%D0%BC_%D0%BE%D0%B1%D1%89_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB
https://bg.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D1%8A%D0%BC_%D0%BD%D0%B0_%D0%95%D0%B2%D0%BA%D0%BB%D0%B8%D0%B4