#include <stdio.h>
#include <math.h>
#define ARRSIZE 20
#define SQSIZE 51 // Любое нечётное число подойдёт
void transfer_coordinates( int abscissa[ ] , int ordinate[ ] ) ;
void double_bubble_sort( int arr_1[ ] , int arr_2[ ] , int order[ ] ) ;
void print_field( int abscissa[ ] , int ordinate[ ] , int order[ ] ) ;
void initialize_order_array( int order[ ] ) ;
int main( )
{
double spiral_coefficient = 1.2 ; // r = k*(theta) 1.2
double spiral_theta = 0 ;
double polar_radius;
int abscissa[ ARRSIZE] ;
int ordinate[ ARRSIZE] ;
int order[ ARRSIZE] ;
initialize_order_array( order) ;
int i;
for ( i = 0 ; i < ARRSIZE; i++, spiral_theta += 1 ) {
polar_radius = spiral_coefficient * spiral_theta;
abscissa
[ i
] = ( int ) round
( polar_radius
* cos ( spiral_theta
) ) ; ordinate
[ i
] = ( int ) round
( polar_radius
* sin ( spiral_theta
) ) ; }
print_field( abscissa, ordinate, order) ;
return 0 ;
}
void double_bubble_sort( int arr_1[ ] , int arr_2[ ] , int order[ ] )
{
int i, j, dump;
for ( i = 0 ; i < ARRSIZE; i++ ) {
for ( j = 0 ; j < ARRSIZE - 1 ; j++ ) {
if ( arr_2[ j + 1 ] < arr_2[ j] ) {
dump = arr_1[ j + 1 ] , arr_1[ j + 1 ] = arr_1[ j] , arr_1[ j] = dump;
dump = arr_2[ j + 1 ] , arr_2[ j + 1 ] = arr_2[ j] , arr_2[ j] = dump;
dump = order[ j + 1 ] , order[ j + 1 ] = order[ j] , order[ j] = dump;
}
}
}
for ( i = 0 ; i < ARRSIZE - 1 ; i++ ) {
if ( arr_2[ i + 1 ] == arr_2[ i] && arr_1[ i + 1 ] < arr_1[ i] ) {
dump = arr_1[ i + 1 ] , arr_1[ i + 1 ] = arr_1[ i] , arr_1[ i] = dump;
dump = order[ i + 1 ] , order[ i + 1 ] = order[ i] , order[ i] = dump;
}
}
}
void print_field( int abscissa[ ] , int ordinate[ ] , int order[ ] )
{
transfer_coordinates( abscissa, ordinate) ;
double_bubble_sort( abscissa, ordinate, order) ;
int x, y, i;
int half = ( SQSIZE - 1 ) / 2 ;
for ( i = y = 0 ; y < SQSIZE; y++ ) {
for ( x = 0 ; x < SQSIZE; x++ ) {
if ( y == ordinate[ i] && x == abscissa[ i] && i < ARRSIZE) {
printf ( order
[ i
] < 10 ? "%d " : "%d" , order
[ i
] ) ; i++;
} else if ( x == half || y == half) {
} else {
}
}
}
}
void transfer_coordinates( int abscissa[ ] , int ordinate[ ] )
{
int half = ( SQSIZE - 1 ) / 2 ;
int i;
for ( i = 0 ; i < ARRSIZE; i++ ) {
abscissa[ i] += half;
ordinate[ i] = half - ordinate[ i] ;
}
}
void initialize_order_array( int order[ ] )
{
int i;
for ( i = 0 ; i < ARRSIZE; i++ ) {
order[ i] = i;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNkZWZpbmUgQVJSU0laRSAyMAojZGVmaW5lIFNRU0laRSA1MSAvLyDQm9GO0LHQvtC1INC90LXRh9GR0YLQvdC+0LUg0YfQuNGB0LvQviDQv9C+0LTQvtC50LTRkdGCCgp2b2lkIHRyYW5zZmVyX2Nvb3JkaW5hdGVzKGludCBhYnNjaXNzYVtdLCBpbnQgb3JkaW5hdGVbXSk7CnZvaWQgZG91YmxlX2J1YmJsZV9zb3J0KGludCBhcnJfMVtdLCBpbnQgYXJyXzJbXSwgaW50IG9yZGVyW10pOwp2b2lkIHByaW50X2ZpZWxkKGludCBhYnNjaXNzYVtdLCBpbnQgb3JkaW5hdGVbXSwgaW50IG9yZGVyW10pOwp2b2lkIGluaXRpYWxpemVfb3JkZXJfYXJyYXkoaW50IG9yZGVyW10pOwoKaW50IG1haW4oKQp7CiAgICBkb3VibGUgc3BpcmFsX2NvZWZmaWNpZW50ID0gMS4yOyAvLyByID0gayoodGhldGEpIDEuMgoKICAgIGRvdWJsZSBzcGlyYWxfdGhldGEgPSAwOwogICAgZG91YmxlIHBvbGFyX3JhZGl1czsKCiAgICBpbnQgYWJzY2lzc2FbQVJSU0laRV07CiAgICBpbnQgb3JkaW5hdGVbQVJSU0laRV07CgogICAgaW50IG9yZGVyW0FSUlNJWkVdOwogICAgaW5pdGlhbGl6ZV9vcmRlcl9hcnJheShvcmRlcik7CgogICAgaW50IGk7CgogICAgZm9yIChpID0gMDsgaSA8IEFSUlNJWkU7IGkrKywgc3BpcmFsX3RoZXRhICs9IDEpIHsKICAgICAgICBwb2xhcl9yYWRpdXMgPSBzcGlyYWxfY29lZmZpY2llbnQgKiBzcGlyYWxfdGhldGE7CiAgICAgICAgYWJzY2lzc2FbaV0gPSAoaW50KSByb3VuZChwb2xhcl9yYWRpdXMgKiBjb3Moc3BpcmFsX3RoZXRhKSk7CiAgICAgICAgb3JkaW5hdGVbaV0gPSAoaW50KSByb3VuZChwb2xhcl9yYWRpdXMgKiBzaW4oc3BpcmFsX3RoZXRhKSk7CiAgICB9CgogICAgcHJpbnRfZmllbGQoYWJzY2lzc2EsIG9yZGluYXRlLCBvcmRlcik7CiAgICByZXR1cm4gMDsKfQoKdm9pZCBkb3VibGVfYnViYmxlX3NvcnQoaW50IGFycl8xW10sIGludCBhcnJfMltdLCBpbnQgb3JkZXJbXSkKewogICAgaW50IGksIGosIGR1bXA7CgogICAgZm9yIChpID0gMDsgaSA8IEFSUlNJWkU7IGkrKykgewogICAgICAgIGZvciAoaiA9IDA7IGogPCBBUlJTSVpFIC0gMTsgaisrKSB7CiAgICAgICAgICAgIGlmIChhcnJfMltqICsgMV0gPCBhcnJfMltqXSkgewogICAgICAgICAgICAgICAgZHVtcCA9IGFycl8xW2ogKyAxXSwgYXJyXzFbaiArIDFdID0gYXJyXzFbal0sIGFycl8xW2pdID0gZHVtcDsKICAgICAgICAgICAgICAgIGR1bXAgPSBhcnJfMltqICsgMV0sIGFycl8yW2ogKyAxXSA9IGFycl8yW2pdLCBhcnJfMltqXSA9IGR1bXA7CiAgICAgICAgICAgICAgICBkdW1wID0gb3JkZXJbaiArIDFdLCBvcmRlcltqICsgMV0gPSBvcmRlcltqXSwgb3JkZXJbal0gPSBkdW1wOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoaSA9IDA7IGkgPCBBUlJTSVpFIC0gMTsgaSsrKSB7CiAgICAgICAgaWYgKGFycl8yW2kgKyAxXSA9PSBhcnJfMltpXSAmJiBhcnJfMVtpICsgMV0gPCBhcnJfMVtpXSkgewogICAgICAgICAgICBkdW1wID0gYXJyXzFbaSArIDFdLCBhcnJfMVtpICsgMV0gPSBhcnJfMVtpXSwgYXJyXzFbaV0gPSBkdW1wOwogICAgICAgICAgICBkdW1wID0gb3JkZXJbaSArIDFdLCBvcmRlcltpICsgMV0gPSBvcmRlcltpXSwgb3JkZXJbaV0gPSBkdW1wOwogICAgICAgIH0KICAgIH0KfQp2b2lkIHByaW50X2ZpZWxkKGludCBhYnNjaXNzYVtdLCBpbnQgb3JkaW5hdGVbXSwgaW50IG9yZGVyW10pCnsKICAgIHRyYW5zZmVyX2Nvb3JkaW5hdGVzKGFic2Npc3NhLCBvcmRpbmF0ZSk7CiAgICBkb3VibGVfYnViYmxlX3NvcnQoYWJzY2lzc2EsIG9yZGluYXRlLCBvcmRlcik7CgogICAgaW50IHgsIHksIGk7CiAgICBpbnQgaGFsZiA9IChTUVNJWkUgLSAxKSAvIDI7CgogICAgZm9yIChpID0geSA9IDA7IHkgPCBTUVNJWkU7IHkrKykgewogICAgICAgIGZvciAoeCA9IDA7IHggPCBTUVNJWkU7IHgrKykgewogICAgICAgICAgICBpZiAoeSA9PSBvcmRpbmF0ZVtpXSAmJiB4ID09IGFic2Npc3NhW2ldICYmIGkgPCBBUlJTSVpFKSB7CiAgICAgICAgICAgICAgICBwcmludGYob3JkZXJbaV0gPCAxMCA/ICIlZCAiIDogIiVkIiwgb3JkZXJbaV0pOwogICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gaGFsZiB8fCB5ID09IGhhbGYpIHsKICAgICAgICAgICAgICAgIHByaW50ZigieCAiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHByaW50ZigiICAiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwcmludGYoIlxuIik7CiAgICB9Cn0KCnZvaWQgdHJhbnNmZXJfY29vcmRpbmF0ZXMoaW50IGFic2Npc3NhW10sIGludCBvcmRpbmF0ZVtdKQp7CiAgICBpbnQgaGFsZiA9IChTUVNJWkUgLSAxKSAvIDI7CiAgICBpbnQgaTsKICAgIGZvciAoaSA9IDA7IGkgPCBBUlJTSVpFOyBpKyspIHsKICAgICAgICBhYnNjaXNzYVtpXSArPSBoYWxmOwogICAgICAgIG9yZGluYXRlW2ldID0gaGFsZiAtIG9yZGluYXRlW2ldOwogICAgfQp9Cgp2b2lkIGluaXRpYWxpemVfb3JkZXJfYXJyYXkoaW50IG9yZGVyW10pCnsKICAgIGludCBpOwogICAgZm9yIChpID0gMDsgaSA8IEFSUlNJWkU7IGkrKykgewogICAgICAgIG9yZGVyW2ldID0gaTsKICAgIH0KfQo=