欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

第九届蓝桥杯螺旋折线java

程序员文章站 2022-09-16 20:57:50
题目:如图p1.pgn所示的螺旋折线经过平面上所有整点恰好一次。对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。例如dis(0, 1)=3, dis(-2, -1)=9给出整点坐标(X, Y),你能计算出dis(X, Y)吗?【输入格式】X和Y对于40%的数据,-1000 <= X, Y <= 1000对于70%的数据,-100000 <= X, Y <= 100000对于100%的数据, -100000000...

题目:
如图p1.pgn所示的螺旋折线经过平面上所有整点恰好一次。
对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。

例如dis(0, 1)=3, dis(-2, -1)=9

给出整点坐标(X, Y),你能计算出dis(X, Y)吗?

【输入格式】
X和Y

对于40%的数据,-1000 <= X, Y <= 1000
对于70%的数据,-100000 <= X, Y <= 100000
对于100%的数据, -1000000000 <= X, Y <= 1000000000

【输出格式】
输出dis(X, Y)
【输入样例】
0 1
【输出样例】
3
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。
第九届蓝桥杯螺旋折线java
解题思路:
1、将原图左下角的一条边顺时针旋转90度,可以得到不同大小的正方形,如图所示
第九届蓝桥杯螺旋折线java
2、解题步骤
(1)输入需要求dis(X, Y)的整点坐标(X,Y)
(2)判断当前点属于第几个正方形
(3)计算当前点所属正方形的之前的正方形的长度和,利用等差数列的求和公式。图中不同正方形的周长分别为8,16,24…即为公差为8的等差数列,求该正方形之前正方形的周长之和可以利用等差数列的求和公式,带入求和公式Sn=na1+n(n-1)/2d,即有8(n-1)+(n-1)(n-2)/28,化简可得4n(n-1)
(4)计算当前点在所属正方形所走过的轨迹之和,需要考虑不同情况计算,如图,绿色部分为输入整点坐标Y>X的情况,红色为其他情况,有图可得计算规律。
第九届蓝桥杯螺旋折线java
(5)将之前正方形的周长之和加上改点在当前正方形走过的轨迹之和可得答案。
代码:

public class Demo7 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		long X=sc.nextLong();//输入x坐标
		long Y=sc.nextLong();//输入y坐标
		sc.close();
		//1. 判断当前点属于第几个正方形
		long n=Math.max(Math.abs(X), Math.abs(Y));
		//2. 计算当前点所属正方形的之前的正方形的长度和,利用等差数列的求和公式
		long s=4*n*(n-1);
		//3. 接下来计算当前点在所属正方形所走过的轨迹之和
		long x=X-(-n),y=Y-(-n);
		long s1=0;
		//3.1考虑不同情况计算
		if(Y>X) {
			s1+=x+y;
		}else {
			s1+=8*n-x-y;
		}
		System.out.println(s+s1);
	}

}

END

本文地址:https://blog.csdn.net/weixin_43378573/article/details/107659251