本文主要是介绍hdu 1030,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
画张大图就好了。
第n行的第一个正三角数(n-1)^2+1 最后一个正三角数n^2。所以一个数n所在的行是sqrt(n-1)+1。
import java.util.Scanner;
public class Main
{ public static void main(String args[]){int n,m;Scanner cin=new Scanner(System.in);while(cin.hasNext()){m=cin.nextInt();n=cin.nextInt();if(m>n){int t=m;m=n;n=t;}int fm=(int)Math.sqrt(m-1)+1;//m所在层数int fn=(int)Math.sqrt(n-1)+1;//n所在层数int fmb=(int)Math.pow(fm-1, 2)+1;//fm的第一个正三角数int fnb=(int)Math.pow(fn-1, 2)+1;//fn的第一个正三角数int fnl=fnb+2*((m-fmb)/2);//m左斜列在fn层的交点int fnr=fnb+2*((m-fmb+1)/2+fn-fm);//m右斜列在fn层的交点int step=0;if(n<=fnl || n>=fnr)//如果在左交点或者右交点之外step=2*(fn-fm)+(m-fm)%2+Math.min(Math.abs(fnl-n),Math.abs(fnr-n));else //在两交点之间step=2*(fn-fm)-(n-fn)%2+(m-fm)%2;//(n-fn)%2,(m-fm)%2判断n和m是正三角数还是倒三角数System.out.println(step);}}
}
这篇关于hdu 1030的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!