【題解】Zerojudge c292 - APCS2017-0304-3數字龍捲風

題目連結

題目大意

給定一個 $n \times n$ 的地圖,每個格子上有數字。請從地圖的中心出發,按照「龍捲風」的順序輸出數字。

題解

遇到這種類型的題目我們可以將 $x$ 和 $y$ 在各個方向的變化量用陣列做儲存,這樣實作起來會方便很多。觀察到走的步數為 $1, 1, 2, 2, 3, 3, \dots$,小心實作就可以了,細節請參考 code。
#include <bits/stdc++.h>
using namespace std;

const int dx[] = {0, -1, 0, 1};
const int dy[] = {-1, 0, 1, 0};

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n, dir;
	cin >> n >> dir;
	vector<vector<int>> grid(n, vector<int>(n));
	for(int i = 0; i < n; i++) {
		for(int j = 0; j < n; j++) {
			cin >> grid[i][j];
		}
	}
	int x = n / 2, y = n / 2;
	cout << grid[x][y];
	for(int l = 1; l < n; l++) {
		for(int r = 0; r < 2; r++) {
			for(int i = 0; i < l; i++) {
				x += dx[dir];
				y += dy[dir];
				cout << grid[x][y];
			}
			dir = (dir + 1) % 4;
		}
	}
	for(int l = 1; l < n; l++) {
		x += dx[dir];
		y += dy[dir];
		cout << grid[x][y];
	}
	cout << "\n";
	return 0;
}

如果本文對您有幫助的話幫忙點擊廣告和分享吧!

© 若無特別註明,本站文章皆由 WeakMouse's Coding Blog 原創 ,轉載引用本文前請先留言告知。本文轉載請註明文章源自 WeakMouse's Coding Blog ,作者 ,並附上原文連結: 【題解】Zerojudge c292 - APCS2017-0304-3數字龍捲風

張貼留言

0 留言