本以为很简单的算法题,幻想几分钟几行代码搞定,没想到几年都没搞定,踢到钢板了
各位神人果断出手,救题于千军万马中,招数任出
当然,能够不用条件句那就最好,能不借助数组就不借助数组,当然,不是说不可以
输入输出行数,得出下图数字阵列
本以为很简单的算法题,幻想几分钟几行代码搞定,没想到几年都没搞定,踢到钢板了
各位神人果断出手,救题于千军万马中,招数任出
当然,能够不用条件句那就最好,能不借助数组就不借助数组,当然,不是说不可以
输入输出行数,得出下图数字阵列
来个java版:
public class Test {
public static int N = 10;
public static int value(int px, int py, int di, int dj, int s, int n) {
for (int i = 0; i < n; i++) {
if (px == i + di && py == i + dj) {
return s + i + 1;
}
if (i != 0) {
if (px == i + di && py == 0 + dj) {
return s + 3 * n - 2 - i;
}
if (px == n - 1 + di && py == i + dj) {
return s + 2 * n - 1 - i;
}
}
}
if (n > 3) {
return value(px, py, 2 + di, 1 + dj, s + 3 * n - 3, n - 3);
}
throw new RuntimeException("something goes wrong.");
}
public static void main(String[] args) throws Exception {
int width = Integer.toString((int) ((N * N - N) / 2 + N)).length();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (i >= j) {
System.out.print(String.format("%" + width + "s", value(i, j, 0, 0, 0, N)) + "\t");
}
}
System.out.println();
}
}
}