目录
题目描述:
对于二维平面上的一个点,记其坐标为 (x,y)。通常当我们说到“单位圆”的时候,默认是指到原点 (0,0) 的欧氏距离(即 x2+y2)为 1 的所有点构成的曲线。现在考虑“距离”的另一种定义,令 (x,y) 到原点 (0,0) 的另类距离为 ∣x2−xy−y2∣,则在这个另类距离下的单位圆就在二维平面上形成了另外形状的曲线。
本题给定一个正整数区间 [a,b],求正整数坐标 (x,y)∈[a,b]×[a,b] 范围内,另类单位圆上到原点 (0,0) 的欧氏距离最小和最大的点坐标。
输入格式:
输入在一行中给出闭区间的两个端点,即正整数 a 和 b(1≤a≤b≤10000)。
输出格式:
第一行输出到原点 (0,0) 的欧氏距离最小的点坐标,第二行输出到原点 (0,0) 的欧氏距离最大的点坐标。格式均为 (x, y)
。
题目保证解存在且唯一。
输入样例:
10 1000
输出样例:
(21, 13)
(987, 610)
限制:
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
题目链接:
题目目前还没到各大网站公布,可以到这里面看看
程序设计类实验辅助教学平台https://pintia.cn/home
代码思路:
题目有点绕,看不懂题目的化,那就看代码注释,相信同志你肯定可以看懂.
import java.util.Scanner;
public class lx1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 根据题意 x和y的范围是[a,b];
int a = scanner.nextInt();
int b = scanner.nextInt();
// 把要求的 最大坐标 由最小的a赋值 让后面好操作
int max = a;
int max1 = a;
// 把要求的 最小坐标 由最大的b赋值 让后面操作顺利
int min = b;
int min1 = b;
// 由于题目时间充足 所以两个for循环解决 完全没问题
// 两个for循环的作用是 找到所有的坐标值 然后找出最大的坐标 和 最小的坐标
for (int i = a; i <= b; i++) {
for (int j = a; j <= b; j++) {
// 由题意可知 i * i - i * j - j * j == 1 | i * i - i * j - j * j == -1时 i和j才是
// 另类单位圆的坐标
if (i * i - i * j - j * j == 1 | i * i - i * j - j * j == -1) {
// 找最大值 坐标 注意:坐标的x和y是一对 是要同时改变的
if (max1 <= i & max <= j) {
max1 = i;
max = j;
}
// 找最小值 坐标 注意:坐标的x和y是一对 是要同时改变的
if (min1 >= i & min >= j) {
min1 = i;
min = j;
}
}
}
}
System.out.println("(" + min1 + ", " + min + ")");
System.out.println("(" + max1 + ", " + max + ")");
}
}