Loading...
DeyanPeychev avatar DeyanPeychev 21 Точки

Завъртане на масив

Здравейте,
Имам следния проблем: 
В задача 2 от Exam Preparation lll има един тест, на който пише rollRight 2000000000 times. Очевидно е, че с int няма да стане, за това направих променливата count от тип long. Проблемът, който настъпи обаче, както може да преположите е, че времето за изпълнение не стига, защото завъртането на масива цикли прекалено дълго. Та исках да Ви попитам как мога да намаля този count, така че да не цикли толкова дълго, но да дава верен резултат при такива големи стойности? В една от лекциите от Programming Fundamentals това беше споменато, но не успях да го открия, за това ще се радвам, ако някой даде идея. smiley

Тагове:
0
Programming Fundamentals
damyan91 avatar damyan91 91 Точки

Използвай деление с остатък - %, за да не правиш излишни завъртания. Ако един масив с дължина 5 се завърти 5 пъти той се връща към начално положение, т.е. ти трябват 5 % 5 = 0 завъртания и т.н. Цикълът ти трябва да се изпълни count % array.Length пъти.

0
23/02/2017 22:57:26
DeyanPeychev avatar DeyanPeychev 21 Точки

Да, нещо такова беше казал и лектора. Тоест, това значи ли, че в моя случай броя на завъртанията ми ще са array.Length % count? Не мога да го схвана особено.

0
damyan91 avatar damyan91 91 Точки

count % array.Length пъти. Представи си, че имаш масив от 5 елемента - искаш да го завъртиш 7 пъти. 7 % 5 = 2. Трябва да го завъртиш точно два пъти, за да получиш резултата, който искаш. В случая първите 5 завъртания ще са излишни, защото при петото завъртане масивът си идва пак в начално положение:

Имаш масив - 1 2 3 4 5 - дължина 5 - искаш да го завъртиш 7 пъти:

5 1 2 3 4

4 5 1 2 3

3 4 5 1 2

2 3 4 5 1

1 2 3 4 5 - начално положение

5 1 2 3 4

4 5 1 2 3 - завъртане №7, което е равно на завъртане №2, понеже 7 % 5 = 2.

Т.е. няма смисъл да въртиш един масив повече пъти отколкото е дължината му, защото при array.Length завъртания се получава същия резултат.

3
24/02/2017 00:07:09
DeyanPeychev avatar DeyanPeychev 21 Точки

100/100, благодаря много за помощта! smiley

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.