转圈数 java

package 转圈数;

import java.util.ArrayList;

/**
*
* @author Administrator
*/
public class 转圈数 {

static ArrayList<Integer> printal = new ArrayList<Integer>();

public static void main(String[] args) {

//设置n值
int n = 10;
//数组初始化
for (int i = n * n * n; i > 0; i--) {
printal.add(-1);
}

int x = 0;//坐标
int y = 0;//坐标
int sum = 0;//加和
int flag = 0; //方向

for (int i = n * n; i > 0; i--) {

if (printal.get(x + y * n) == -1 && x < n && y < n) {
printal.set(x + y * n, sum++);
//向前移动一个地方
if (flag == 0) {
x++;
}
if (flag == 1) {
y++;
}
if (flag == 2) {
x--;
}
if (flag == 3) {
y--;
}


} else {//方向归零
if (flag == 3) {
flag = -1;
}
flag++;
i++;//帮助这个计数器返回
//返回的向前走
if (flag == 0) {
x++;
}
if (flag == 1) {
y++;
}
if (flag == 2) {
x--;
}
if (flag == 3) {
y--;
}
//错误的向后退
if (flag == 0) {
y++;
}
if (flag == 1) {
x--;
}
if (flag == 2) {
y--;
}
if (flag == 3) {
x++;
}

}
}
//输出
int h = 0;
int point = 0;
for (int p : printal) {
System.out.printf("%5d", p);
if (++point == n * n) {
break;
}
if (++h == n) {
h = 0;
System.out.println();
}
}
}
}


效果


run:
0 1 2 3 4 5 6 7 8 9
35 36 37 38 39 40 41 42 43 10
34 63 64 65 66 67 68 69 44 11
33 62 83 84 85 86 87 70 45 12
32 61 82 95 96 97 88 71 46 13
31 60 81 94 99 98 89 72 47 14
30 59 80 93 92 91 90 73 48 15
29 58 79 78 77 76 75 74 49 16
28 57 56 55 54 53 52 51 50 17
27 26 25 24 23 22 21 20 19 18成功构建 (总时间: 2 秒)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值