[Домашно] 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 ако се подобри алгоритъма още малко; Идеята е още когато въртим в цикъл да съкращаваме това, което можем, а не да изчисляваме просто първо числителя после знаменателя и накрая да делим.
Предполагам, че първият примерен вход на задача 8 е объркан, защото не удовлетворява условието.В решенията, които видях всички колеги са го игнорирали, но все пак така е по условие.
Прав си. В случая обаче според мен условието е грешно, тъй като няма причина n да не може да бъде 0.
Всъщност...
Wikipedia:
"The first Catalan numbers for n = 0, 1, 2, 3, … are
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, ..."
Просто добавете един if за нулата :)Интересно ми е как разбирате условието на задача 10 от новото домашно, понеже аз нещо не го схващам :D В условието се иска сумата от четните да е равна на сумата от нечетните? Понеже е ако е така нещо не се получват отговорите 2+6 # 1+1+3
Моля ви помогнете ако някой го е разбрал :)
:D почнах и аз да си говоря сама - разбрах го. Говори се за произведение (2x1x3 = 1x6) :)
Извинявам се, че напълних форума с мои глупости :D
Ето и моите решения:
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!/X^2 + … + N!/X^N
Problem 6. Calculate N! / K!
Problem 7. Calculate N! / (K! * (N-K)!)
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 18.* Trailing Zeroes in N!
Problem 19.** Spiral Matrix
На проблем 14 имаш ред, който е long dec = int.Parse(Console.ReadLine()); ако някой подаде long число ще ти гръмне, по добре смени инта с long, сега не гърми защото подаваш числа в рамките на типа int, но за да ти е по - качествен кода може да го смениш :).
Да, бях го забелязал във Visual Studio (понеже първо бях използвал int) и съм забравил да го оправя и в PasteBin. Благодаря за отбелязването. :) Само една поправка - проблем 14, а не 13.
Дааам, прав си, всички грешим и за това трябва да си помагаме ;)
Някой измислил ли е решение на Problem 18. * Trailing Zeroes in N!, която като му подадеш за n = 100000, не виси по 2-3 мин? Има някаква закачка там с това "think why" ама аз не мога да уловя логиката :). Иначе и аз съм я решил като намеря фактуриела в BigInteger и след това го деля цялочислено на 10 и после не челочислено и лющя нулите :), но ми се струва твърде лесна за да е със *. Предполагам, че идеята е да я накараме да работи коректно и за 100000, но как...?Нищо не ми идва на акъла, но продължавам да мисля :)
Да, това определено е готино решение. И логично, ако се загледаме каква логика следват броя на нулите от първите 2 примера. dim4o явно го е направил и му се е получило.
За мен логиката е, че при 5 има една нула отзад и при всяка следваща петица трупа нули.
Да, а това може да се потвърди от първите 2 примера:
За n = 10, trailing zeroes = 2
За n = 20, trailing zeroes = 4
От тук следва, че 10 / 2 == 20 / 4 , или иначе казано - нули има за всяко пето число в n.
Моето решение на SpirtalMatrix, ако някой го интересува ;). Да кажа, че сам не можах да се справя и потърсих помощ в нета, някакъв пич я беше решил с едни посоки, хакове и други неща, но аз си измислих мое решение. Взаимствах само да печатам стойностите в двумерен масив, като си създам две променливи row и column, в които да се пазят стойности за "координатите" на стойностите в матрицата, използвам една променлива counter, която да се увеличава при всеки вписан член на матрицата на съответните координати. Забелязах, че страната на матрицата се намалява с 1, през 2 линиии на изписване, тоест изписваме хоризонтален ред с дължина зададеното число n, и след това имаме 2 страни с дължина n-1, след това две с дължина n-2 ((n-1) -1) и така създадох и една променлива side, която да се намалява периодично в зависимост от това коя страна на матрицата запълваме. След което създавам 4 цикала за всяка една от страните и след всеки правя корекции на row и column, за да не излизат координатите извън матрицата. Вмъквам 4-те for цикала за страните в един while, за да ги върти докато изчерпа максималния брой стойности на матрицата, който е = n*n (квадратна матрица), след това с два вложени цикъла печатам всеки един член на двумерния масив. И така си бачка :).
Не видях някой да е решил 4-та задача спазвайки точно условието - да се използват вложени for цикли + switch-case.
Аз също не можах да го измисля по този начин. Направих го само с два for-a и два масива: http://pastebin.com/CpJSjATm
http://pastebin.com/s0TcxbgB <-- моето.
http://pastebin.com/kn5di3qc <-- на dim4o.
И двамата сме ползвали вложени for цикли и switch-case. Решенията ни си приличат.
Да, чудесно изглежда, но според мен пак не е точно според условието, защото използвате два switch-case-а.
"Use 2 nested for-loops and a switch-case statement."
Добре, сега е според условието. Просто не съм обърнал внимание на това 'a' отпред. Благодаря за отбелязването.
Здравейте.
Гледам тук решението на задача 12 - Randomize the Numbers 1…N на колегата @StanDimitroff и нещо не мога да го схвана. Всичко работи точно, няма грешка, грешката е в мен. По-точно не си "превеждам" какво прави if конструкцията, или следният фрагмент от кода:
if (!printed[numberToPrint])
{
Console.Write(numberToPrint + " ");
printed[numberToPrint] = true;
}
else
{
i--;
}
Някой би ли могъл да обясни ред по ред какво се случва...?
Имаш булев масив с n на брой елемнта, на който по подразбиране всички стойности са false. Когато се принтира дадено число, на индекса му в този булев масив се слага стойност true.
На всяка итерация на цикъла се проверява дали произволно изтеглено число е вече принтирано, и ако не е - се принтира и му се променя в булевия масив, а ако е принтирано, водещата променлива i се намалява с едно, за да се изпълнява цикъла, докато не се принтират всички числа.
Надявам се да съм го обяснил добре :)
Това е решението ми на 18-та задача. Но нещо не мога да го подкарам с 100000. Идеи?
int n = int.Parse(Console.ReadLine()); BigInteger fact = 1; int sum = 0; for (BigInteger i = 1; i <= n; i++) { fact *= i; } Console.WriteLine(fact); while (fact % 10 == 0) { fact = fact / 10; sum++; } Console.WriteLine(sum); |
Eто и моето решение на 11
static void Main()
{
int count = 0;
int number = int.Parse(Console.ReadLine());
BigInteger faktoriel = 1;
while (number > 0)
{
faktoriel *= number;
number--;
}
while(faktoriel % 10 == 0)
{
count++;
faktoriel = faktoriel /10;
}
Console.WriteLine("{0} {1}",faktoriel,count);
}
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,.. са четни. Логиката е правилна, а и кода си работи с правилно с всички редици, които пробвах. Ти се бършаш, защото си мислиш, че деля числата, а то не е изобщо така.
Да.. прав си .. моя е грешката.. видях го после но нямах време да драсна.. занимават ме с глупости ;д