1 条题解
-
0
画笔 题解
本题主要考察二维数组。
求曼哈顿距离:
int getdis(int cx, int cy, int x, int y) { // cx 代表当前 x,cy 代表当前 y return abs(cx - x) + abs(cy - y); }染色操作:
可求出所有点与当前点的曼哈顿距离(遍历整个二维数组),将符合条件的染色。
for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (getdis(cx, cy, i, j) < k) s[i][j] = op; } }判断是否出界:
只需要判断横纵坐标是否大于 或等于 。
if (op == 'L') { if (cy - 1 >= 1) { cy--; } } else if (op == 'R') { if (cy + 1 <= n) { cy++; } } else if (op == 'U') { if (cx - 1 >= 1) { cx--; } } else if (op == 'D') { if (cx + 1 <= n) { cx++; } }完整 AC 代码:
#include <bits/stdc++.h> using namespace std; int getdis(int cx, int cy, int x, int y) { return abs(cx - x) + abs(cy - y); } int main() { int n, k; cin >> n >> k; char op; char s[100][100]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { s[i][j] = '.'; } } int cx = (n + 1) / 2; int cy = (n + 1) / 2; while (cin >> op) { if (op == 'L') { if (cy - 1 >= 1) { cy--; } } else if (op == 'R') { if (cy + 1 <= n) { cy++; } } else if (op == 'U') { if (cx - 1 >= 1) { cx--; } } else if (op == 'D') { if (cx + 1 <= n) { cx++; } } else { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (getdis(cx, cy, i, j) < k) { s[i][j] = op; } } } } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cout << s[i][j]; } cout << endl; } return 0; }
- 1
信息
- ID
- 12624
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 4
- 标签
- 递交数
- 29
- 已通过
- 17
- 上传者