Напълнете масив от спирала (започвайки от центъра в посока на часовниковата стрелка) - стек преливане на Руски

Като оставим настрана моите мисли и се прилага само за кода, кодът присъства там е написано по такъв начин, че тя лесно ви дава възможност да попълните спирала масив, независимо от броя на елементите (дори и странно), лесен за четене и лесно да промените.

Този код запълва масив от 1 до извън "кръга" на масива. Това е стойност, която е изпълнена с множество елементи се увеличава от 1 до N * N.

От този код, за да получите спирала е много проста!

Достатъчно е да се промени от начална стойност инициализатор N * N 1, и пълнене елементи масив също, като се започне с "външен кръг" масива.

Ако в примера на запълването идва от точката с координати [0] [0] в правилната посока, а след това да си спирала нужда да се премине от една точка с координати [0] [N-1] в лявата посока.

Само вместо масив съм използвал в вектор демонстрационна програма, тъй като C ++ не поддържа масиви с променлива дължина, които използвате във вашата програма.

Ето как програмата може да изглежда така

Неговата продукция към конзолата, както следва:

Що се отнася до вашия код, в допълнение към факта, че не трябва да се използва с масиви с различен размер, тъй като те не са съвместими с C ++ стандарт, виждам във втория случай грешката. Доколкото разбирам, в този случай индексът х трябва да се увеличи, вместо да намалява, тъй като следващата продукция елемент трябва да се намира на долния ред на оригиналния ред. В допълнение, в подхода си, можете да се объркате, когато се занимават не само с нечетен брой на елементите в масива, но с четен брой на елементите в масива.