蛇形填数升级版(递归no.8)
来源:JK老班
题目:蛇形填数,问第 i 排 j 列填的是什么数?
模拟(全部填满,输出要求的)吗?
先找出这个点在哪一圈的哪条边,再得出它的值。
//升级版1469:蛇形填数,问第i排第j列放的是什么数字?
//先找出这个点在哪一圈的哪条边上,算出它的值。
import java.util.Scanner;public class P1470Query {
int n;
int num;
int GX,GY;//目标点坐标
public P1470Query() {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
GX=2; GY=2;
System.out.println(Search(0,n-1,n-1));
}
int Search(int x,int y,int len) {
if(x==GX && y==GY) return 1;//如果当前点就是目标点
int count=0;
if(GY==y && GX>=x && GX<x+len) return GX-x+1;//在当前圈的右侧边
count+=len;
if(GX==x+len && GY<=y && GY>y-len) return count+GY-y+1;//在当前圈的下侧边
count+=len;
if(GY==y-len && GX>x && GX<=x+len) return count+x+len-GX+1;//在当前圈的左侧边
count+=len;
if(GX==x && GY<y && GY>=y-len) return count+GY-(y-len)+1;//在当前圈的上侧边
count+=len;
return count+Search(x+1,y-1,len-2);//都不在,进入内层,每一层都是从1开始填,外层值加到内层
}
public static void main(String[] args) {
P1470Query p=new P1470Query();
}
}