Spiral array
3 отговора
232 прегледа
Spiral array
Help ....
Правя едно масивче :
Ама съм отвикнал да мисля с главата си и така го мажа и цапам, че ме е
срам да Ви го покажа.
за n=4
-----------------
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
-----------------
Кажте някои по-тарикатски начин за спираловидна инициализация !
МЕРСИ >>>>
Правя едно масивче :
Ама съм отвикнал да мисля с главата си и така го мажа и цапам, че ме е
срам да Ви го покажа.
за n=4
-----------------
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
-----------------
Кажте някои по-тарикатски начин за спираловидна инициализация !
МЕРСИ >>>>
Re: Spiral array
neka imame masiv A [1..x,1..y]
neka v nachaloto vsichki elementi v nego = 0
xi=1
yi=1
function check (x,y) boolean
if (x>xi) or (x<1) or (y>yi) or (y<1) then
check=false
else
check=(A [x,y]=0)
end if
end function
repeat
if check (x+1,y) then
x=x+1
else
if check (x,y+1) then
y=y+1
else
if check (x-1,y) then
x=x-1
else
if check (x,y-1) then
y=y-1
end if
end if
end if
end if
until not check (x,y)
moze da ne e suvsem tocho, ama v text vid zvuchi taka:
opitvame se da se premestim v slednata posledovatelnos:
1. naliavo
2. nadolu
3. nazad
4. nagore
i taka dokato mozem
ako neshto e neiasno ili netochno, shte se pomucha da buda po-tochen
polzvan e psevdokod, ama e lesno da se prevede na koi da e ezik
чети и дишай по-леко
neka v nachaloto vsichki elementi v nego = 0
xi=1
yi=1
function check (x,y) boolean
if (x>xi) or (x<1) or (y>yi) or (y<1) then
check=false
else
check=(A [x,y]=0)
end if
end function
repeat
if check (x+1,y) then
x=x+1
else
if check (x,y+1) then
y=y+1
else
if check (x-1,y) then
x=x-1
else
if check (x,y-1) then
y=y-1
end if
end if
end if
end if
until not check (x,y)
moze da ne e suvsem tocho, ama v text vid zvuchi taka:
opitvame se da se premestim v slednata posledovatelnos:
1. naliavo
2. nadolu
3. nazad
4. nagore
i taka dokato mozem
ako neshto e neiasno ili netochno, shte se pomucha da buda po-tochen
polzvan e psevdokod, ama e lesno da se prevede na koi da e ezik
чети и дишай по-леко
Ето ти C - версия.
Стана ми интересно и го написах.
void FillSpiral( int *arr, int N, int Value )
{
int I;
int Step = N;
while( N > 1 )
{
N--;
for( I = 0; I < N ; I++ )
{
*arr = Value++;
arr++;
}
for( I = 0; I < N; I++ )
{
*arr = Value++;
arr += Step;
}
for( I = 0; I < N; I++ )
{
*arr = Value++;
arr--;
}
for( I = 0; I < N; I++ )
{
*arr = Value++;
arr -= Step;
}
arr += Step+1;
N--;
}
if( N == 1 )
*arr = Value++;
}
Вика се:
const int N = 4;
int a[N][N];
FillSpiral(a[0], N, 1 );
void FillSpiral( int *arr, int N, int Value )
{
int I;
int Step = N;
while( N > 1 )
{
N--;
for( I = 0; I < N ; I++ )
{
*arr = Value++;
arr++;
}
for( I = 0; I < N; I++ )
{
*arr = Value++;
arr += Step;
}
for( I = 0; I < N; I++ )
{
*arr = Value++;
arr--;
}
for( I = 0; I < N; I++ )
{
*arr = Value++;
arr -= Step;
}
arr += Step+1;
N--;
}
if( N == 1 )
*arr = Value++;
}
Вика се:
const int N = 4;
int a[N][N];
FillSpiral(a[0], N, 1 );