螺旋队列的java实现

import java.util.Scanner;

public class Luoxuan {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		while(true){
		Scanner sc1=new Scanner(System.in);
		System.out.println("请输入x坐标:");
		int a=sc1.nextInt();
		System.out.println("请输入y坐标:");
		int b=sc1.nextInt();
		System.out.printf("坐标(%d,%d)上的数是:",a,b);
		System.out.println(new Luoxuan().getVal(a,b));
		}

	}
	private int getVal(int a,int b){
		//定位点(a,b)在第几圈,默认原点为第0圈,向外扩散
		int n=Math.max(Math.abs(a), Math.abs(b));
		//如果(a,b)为原点,返回1
		if(n==0) return 1;
		int retval;
		//求出坐标(n,n)点上的数
		int val=(int) Math.pow((2*n+1), 2)-n*6;
		//求出(a,b)与(n,n)点的位置关系
		int i=n-a,j=n-b;
		 //将正方形分为上下左右4条边,需要注意对圈上的所有点不重不漏
		//(a,b)在右边
			if(i==0){
				//如果是右上角的点
				if(j==2*n) retval=val+6*n;
				else retval=val-j;
		}   //(a,b)在下边
			else if(j==0){
				retval=val+i;
			}//(a,b)在左边
			else if(i==2*n){
				retval=val+2*n+j;
			}//(a,b)在上边
			else retval=val+6*n-i;
		
		return retval;
		
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值