[Домашно] Loops - цялото
Problem 1. Numbers from 1 to N
Problem 2. Numbers Not Divisible by 3 and 7
Problem 3. Min, Max, Sum and Average of N Numbers
Problem 4. Print a Deck of 52 Cards
Problem 5. Calculate 1 + 1!/X + 2!/X2 + … + N!/XN
Problem 6. Calculate N! / K!
Problem 7. Calculate N! / (K! * (N-K)!)
Problem 8. Catalan Numbers
Problem 8. Catalan Numbers
Problem 9. Matrix of Numbers
Problem 10. Odd and Even Product
Problem 11. Random Numbers in Given Range
Problem 12. * Randomize the Numbers 1…N
Problem 13. Binary to Decimal Number
Problem 14. Decimal to Binary Number
Problem 15. Hexadecimal to Decimal Number
Problem 16. Decimal to Hexadecimal Number
Problem 17. * Calculate GCD
Problem 17. * Calculate GCD
Problem 18. * Trailing Zeroes in N!
Problem 19. ** Spiral Matrix
Catalan Numbers съм я решил по 2 начина, но единия работи само до N=30, защото не използва BigInteger. Реших, че ще е интересно да се направи оптимизация, така че да се изстиска максимума от примитивните типове променливи. Евентуално може да се направи да работи и до N=36 ако се подобри алгоритъма още малко; Идеята е още когато въртим в цикъл да съкращаваме това, което можем, а не да изчисляваме просто първо числителя после знаменателя и накрая да делим.
dim4o, задача 10 от твоето домашно нещо ми се струва грешничка малко ;д Ти там ако не се бъркам делиш всяко едно число на 2.. и случайно ако не се дели го слагаш към нечетните ;д Аз мисля,че в задачата се иска четни и нечетни в реда в които са написани.. а не да разбираш дали всяко едно число е четно ;д ако е написано 2 1 1 6 3 умножаваш 2 * 1 * 3 = 6.. и 1 * 6 = 6.. което ги прави равни.В твоята задачка всяко число се дели на 2.. :) Оправи я малко или ме поправете мен ако бъркам.. :)
Не мисля, че греша. Аз не деля числото на нищо, а просто проверявам дали индекса на масива се дели на 2. Ако се дели на 2 или самия индек се 0, позицията на числото е нечетна, а иначе е четна, т.е. позициите с индекси 0, 2, 4, ... са нечетни, а тези с индекси 1, 3, 5,.. са четни. Логиката е правилна, а и кода си работи с правилно с всички редици, които пробвах. Ти се бършаш, защото си мислиш, че деля числата, а то не е изобщо така.
Да.. прав си .. моя е грешката.. видях го после но нямах време да драсна.. занимават ме с глупости ;д
И аз имам много разсейващи фактори и наистина не е изключено да съм сгафил нещо. Сега гледам, че това || index == 0 е излишно. Пуснах тук задачите с надеждата, че ще излезят бъгове, които не мога да видя сам.
Относно задача 14 - нужно е да принтираш стринга отзад напред, за да е коректен изходът ;)
Поздрави :)
dim4o.. аз пак до теб опрях.. ;д гледам задачка 16.. но изкарва отговорите на обратно.. Трябва някъде в края да сложиш едно revers-че .. :))
За задача 16 - отново същия проблем като 14-та (нужно е да се принтира изхода на обратно). При switch case-овете не е нужно да добавяш натрупания до момент string.
case 10: hexNumber += "A" + hexNumber(излишно е); break;
И последно - цикъла е нужно да върти докато числото е различно от 0.
Cheers man :)
Без това +hexNumber ще го изкарва в обратен ред.. но с него би трябвало да ги разменя.. Сега си играя с дебъгера да видя защо го прави..
Едит: .. Махаш тези дето каза колегата.. +hexNumber и отдолу слагаш един цикъл които да ги завърти.. така при мен се получи ;)
Ето едно решение 4 задача и от мен: Използвам char символите от Unicode таблицата за боите на картите(http://en.wikipedia.org/wiki/Playing_cards_in_Unicode).
http://pastebin.com/Du66WRGF
zdgeorgiev, oтносно Problem 14 :
не мога да разбера какво имаш впредвит. Кода си работи коректно. Примерно:
236476736
1110000110000101100101000000
Press any key to continue . . .
Това си е с коректен изход.
binNumber = remain + binNumber
; Той все едно казва: "Постави най-старшия разряд най-отпред" - както и трябва да бъде. Затова и изхода е коректен, а не обърнат.zontak, zdgeorgiev, относно Problem 16:
Благодаря, че обърнахте внимание, защото изхода наистина не е коректен. Там проблема е, че съм копирал стар код. Просто навсякъде, където има "+=" трябва да се замести само с "=" и кода си работи правилно - пробвайте. Сега се сещам, че бях сложил "+" да тествам нещо. Но пак казвам, че няма никаква причина написан така кода да изкарва резултат в обратен ред. Логиката е като при задача 14. Да, сега забелязвам, че не съм обработил случая с вход 0. Ще го оправя. Благодаря за коментарите ! :)
zdgeorgiev, логиката в случая case 10: hexNumber = "A" + hexNumber; break; е различна. hexNumber ="A"+ hexNumber; дава различен резултат от hexNumber +="A"; Аз нарочно съм гонил това. Освен това while ( decNumber> 0) и while (decNumber != 0) в случая дават еднакъв резултат
dim4o, прав си наистина! Грешката при мен, от която идва нуждата да принтирам стринга на обратно е свързана с това, че го пълня по следния начин : binaryNumber += remainder(14-та задача).
Относно 16-та задача - same story!
Благодаря за забележките, наистина бяха от полза. Cheers man :)
7-ма задача не работи при n=99 и k=98.
Прилагам решение с един цикъл. Задача 7.
ЗДРАСТИ! КОЛЕГА, АЛГОРИТЪМъТ на зад.17 не работи ако второто 4исло е по-голямо от първото.
Много добри решения! Много ми помогнаха! Благодаря, че си ги споделил :))
dim4o при 8-ма задача една малка корекция за да работи при n=0 втория ред е:
if (num >= 0 && num < 31)
добавил съм само едно = преди нулата.
Здравейте! На мене ли ми се струва или става все по-трудно. Явно трябва да си доста умен да схващаш всички тези цикли, масиви и т.н.