wawatime1 @ 2024-10-12 22:11:55
大佬快来看一下啊!!!
#include <bits/stdc++.h>
using namespace std;
int k, x, y;
void calc(int x, int y, int gx, int gy, int l) {
if (l == 1)
return;
if (gx <= x + l / 2 - 1 && gy <= y + l / 2 - 1) {
printf ("%d %d 1\n", x + l / 2, y + l / 2);
calc (x, y, gx, gy, l / 2);
calc (x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
calc (x + l / 2, y, x + l / 2, y + l / 2 - 1, l / 2);
calc (x + l / 2, y + l / 2, x + l / 2, y + l / 2, l / 2);
} else if (gx <= x + l / 2 - 1 && gy >= y + l / 2) {
printf ("%d %d 2\n", x + l / 2, y + l / 2 - 1);
calc (x, y, x + l / 2 - 1, y + l / 2 - 1, l / 2);
calc (x, y + l / 2, gx, gy, l / 2);
calc (x + l / 2, y, x + l / 2, y + l / 2 - 1, l / 2);
calc (x + l / 2, y + l / 2, x + l / 2, y + l / 2, l / 2);
} else if (gx >= x + l / 2 && gy <= y + l / 2 - 1) {
printf ("%d %d 3\n", x + l / 2 - 1, y + l / 2);
calc (x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
calc (x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
calc (x + l / 2, y, gx, gy, l / 2);
calc (x + l / 2, y + l / 2, x + l / 2, y + l / 2, l / 2);
} else if (gx >= x + l / 2 && gy >= y + l / 2) {
printf ("%d %d 4\n", x + l / 2 - 1, y + l / 2 - 1);
calc (x, y, x + l / 2 - 1, y + l / 2 - 1, l / 2);
calc (x, y + l / 2, x + l / 2 - 1, y + l / 2, l / 2);
calc (x + l / 2, y, x + l / 2, y + l / 2 - 1, l / 2);
calc (x + l / 2, y + l / 2, gx, gy, l / 2);
}
}
int main () {
scanf ("%d", &k);
scanf ("%d%d", &x, &y);
calc (1, 1, x, y, pow (2, k));
return 0;
}
功德圆满
by __yun__ @ 2024-10-12 22:16:40
马蜂难评
一眼没加括号
by __yun__ @ 2024-10-12 22:18:51
@wawatime1
by wawatime1 @ 2024-10-12 22:28:50
@yun 我加了括号的,递归条件写错了,我已改正。
··· 求互关