你需要在三维空间中找到一个未知的、预定的点,使用只能返回从任何传递给它的点到所需未知点的距离的函数,在最少的尝试次数内找到该点。
为了解决这个问题,首先要实现一个函数f,通过取任意点s(x, y, z)的坐标,返回该点与条件未知的随机生成点之间的距离。
你可以任意生成点r(x, y, z),其中x、y、z可以是0到100之间的整数。例如,对于任意生成的点r(0, 0, 10)和传递给函数的点s(0, 0, 0),函数的结果将如下所示:f(s) = 10 // s(0, 0, 0)与r(0, 0, 10)之间的距离为10。接下来,实现分配本身的算法。该算法应该找到任意生成点的坐标,并且调用函数f的次数最少。
我只有一个随机器而不是算法,请帮忙。
const pointToFound = {
x: 12,
y: 9,
z: 76,
};
let attemts = 0;
let isXFound = false;
let isYFound = false;
let isZFound = false;
const pointHistory = [];
const getRandomPoint = () => {
return {
x: isXFound ? isXFound : Math.floor(Math.random() * 101),
y: isYFound ? isYFound : Math.floor(Math.random() * 101),
z: isZFound ? isZFound : Math.floor(Math.random() * 101),
};
};
const getDifference = (point, pointToCompare) => {
return {
x:
Math.max(point.x, pointToCompare.x) - Math.min(point.x, pointToCompare.x),
y:
Math.max(point.y, pointToCompare.y) - Math.min(point.y, pointToCompare.y),
z:
Math.max(point.z, pointToCompare.z) - Math.min(point.z, pointToCompare.z),
};
};
const condition = !isXFound && !isYFound && !isZFound;
while (condition) {
const point = getRandomPoint();
const difference = getDifference(point, pointToFound);
pointHistory.push(point);
attemts += 1;
if (isXFound && isYFound && isZFound) {
console.log("Total attempts: ", attemts);
console.log(point);
break;
}
if (difference.x === 0 && !isXFound) {
isXFound = point.x;
}
if (difference.y === 0 && !isYFound) {
isYFound = point.y;
}
if (difference.z === 0 && !isZFound) {
isZFound = point.z;
}
}
console.log(pointHistory);
我只有一个随机生成器,没有算法。请帮忙。