蛇形填数升级版(递归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();
    }
}
 

猜你喜欢

转载自blog.csdn.net/llllll_____/article/details/88871144