Bài viết: 28 



Link bài:
Thuật toán:
Code:
Thuật toán:
- Khởi chạy mảng 2 chiều chứa hình xoắn ốc của bài, lấy tọa độ a (i) (j) với i = 101 và j = 101 làm gốc tọa độ.
- Dùng chương trình con để chạy từng cạnh một của hình xoắn ốc, ta sẽ khởi tạo từ trong ra ngoài.
- Đối với 1 cạnh, hướng đi của ta sẽ thẳng tiến với 1 trục giữ nguyên, tức từ ô a (i) (j) sẽ đi đến một trong các ô a (i) (j+1), a (i) (j-1), a (i+1) (j), a (i-1) (j). Ta cần thiết lập một hướng đi.
- Khi kết thúc cạnh, ta cần đổi hướng đi.
- Ta nhận biết được khi kết thúc cạnh, thì ô bên trái theo chiều hướng đi sẽ bằng 0.
Code:
Mã:
#include<bits/stdc++.h>
using namespace std;
int x, y, valuefor_position;
int axis[207][207];
void runfor(int position_x, int position_y, int direction_x, int direction_y){
if (position_x == 0 || position_y == 0) return;
int a = position_x, b = position_y;
while (axis[a-direction_y][b+direction_x] != 0){
axis[a][b] = valuefor_position+1;
a += direction_x; b += direction_y;
valuefor_position++;
}
runfor(a, b, -direction_y, direction_x);
}
void read(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
//freopen("VOXO.INP", "r", stdin);
//freopen("VOXO.OUT", "w", stdout);
cin >> x >> y;
}
void run(){
axis[101][101] = 1;
valuefor_position = 1;
runfor(102, 101, 0, 1);
cout << axis[x+101][y+101];
}
int main(){
read();
run();
return 0;
}
Chỉnh sửa cuối: