Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият.
Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание.
Използваме бисквитки и за измерване на маркетинговите ни усилия.
Привет,
Най-сетне стигнах до тази задача. Опитах се да я реша без да чета насоките във форума и учебника, и числовата спирала ме вкара в капан!
В условието на задачата са ползвали примерна редица с първоначална стъпка за нарастване 2: 5, 7, 9, 13, 17, 23, 29, 37...
В резултат, моята логика ме заведе към грешното представяне на редицата, за което съдията награждава само с 30/100. Лесно се вижда, че двете представяния по-долу водят до примерната редица, но грешното работи само с примерната стъпка* - 2 - с всички други стъпки не работи... Странното е, че всички примерни входове не виждат този проблем,
т.е. минават коректно. Явно борбата, за да стигна до работещо решение, ме ядоса и накрая реших задачата и по втория вариант - с масиви. Е, борбата с масивите, дори и непозната материя, беше на пъти по-лека... :)
* Грешно представяне на редицата/стъпката - 2 + 0 -> 2 + 2 -> 4 + 2 -> 6 + 2:
spNext = sp1 + spStep;
sp1 = spNext;
spCtr++;
if (spCtr % 2 == 0)
{
spStep += 2;
}
* Коректно представяне на редицата/стъпката - 2 * 1 -> 2 * 2 -> 2 * 3 -> 2 * 4:
spNext = sp1 + spStep * spPower;
sp1 = spNext;
spCtr++;
if (spCtr % 2 == 0)
{
spPower++;
}
Поздрави,
Иван
Много хубава задачка! Може би най-интересната от всички до тук. Да я реша без масив за мен си беше предизвикателство :)
А иначе, ползвайки твоите променливи, ето този код работи без проблем:
int startStep = 2;
int spStep = 0;
int sp1 = 5;
for (int spCtr = 1; spCtr <= 100; spCtr++) //за 100 числа от редицата...
{
if (spCtr % 2 == 0)
{
spStep += startStep;
}
int spNext = sp1 + spStep;
sp1 = spNext;
Console.Write(spNext + " ");
}
Случайно да не забравяш да променяш стъпката тук: spStep += 2 и за това да имаш някакви проблеми....
Здравей,
Благодаря за обратната връзка.
Да, задачата е готина! Много разсъждения, много анализ...
Относно проблема, в който влезнах... Явно не съм се изразил съвсем коректно, и не си ме разбрал...
Твоята доработка работи, т.е. изчислява коректно редицата, но не визуализира моя проблем.
Допълнителни обяснения за моя "капан", в който влезнах.
* Независимо от първоначалната стъпка spStep, аз добавям винаги "2"! За примерната редица - 5, 7, 9, 13, 17, 23, 29, 37 (spStep = 2 и sp1 = 5) - работи коректно, но разбира се, само за този вариант! Реално не съм се сетил, че увеличението на стъпката на редицата е свързано с първоначалната стъпка spStep.
Нямаше да влезна в този капан, ако имаше пример за редицата и с друга стъпка (1, 3 или която и да е друга)...
Грешен вариант:
int spStep = 2;
int sp1 = 5;
Console.Write(sp1 + " ");
for (int spCtr = 1; spCtr < 100; spCtr++) //за 100 числа от редицата...
{
int spNext = sp1 + spStep;
sp1 = spNext;
if (spCtr % 2 == 0)
{
spStep += 2; // * точно тук е критичният момент на моята грешка в първоначалните разсъждения
}
Console.Write(spNext + " ");
}
Реално, задачата я реших накрая (след доста часове безрезултатна борба), но я реших, след като прочетох допълнителните инструкци, че идеята на спиралата е, че стъпката на увеличението не е винаги "2", а стъпката е равна на въведената стойност за spStep.
И чак след това се амбицирах и реших задачата с масивите (при мен кодът е няколко реда по-къс), т.е. имам две решения на задачата - 1. със знания от обучението и 2. с масивите.
В работещото си решение ползвах подобен вариант на твоята доработка:
int spPower = 0;
int spStep = 2;
int sp1 = 5;
for (int spCtr = 1; spCtr <= 100; spCtr++) //за 100 числа от редицата...
{
if (spCtr % 2 == 0)
{
spPower++;
}
int spNext = sp1 + spStep * spPower;
sp1 = spNext;
Console.Write(spNext + " ");
}
Поздрави,
Иван :)