#c#
Вопрос:
Это код до сих пор:
public static class Vectors
{
public static int[] FindShortest(int[][] vectors)
{
throw new NotImplementedException("Waiting to be implemented.");
}
public static void Main(string[] args)
{
int[][] vectors =
{
new int[] { 1, 1, 1 },
new int[] { 2, 2, 2 },
new int[] { 3, 3, 3 }
};
int[] shortest = Vectors.FindShortest(vectors);
// Expected output: x: 1, y: 1, z: 1
Console.WriteLine(String.Format("x: {0}, y: {1}, z: {2}", shortest[0], shortest[1], shortest[2]));
}
}
Код принимает массив 3D-векторов и возвращает самый короткий из них.
Комментарии:
1. Что
shortest
означает и почему ожидается результат1,1,1
? Хотите найти минимальный вектор, и в этом случае ожидаемый результат будет{ 1, 1, 1 }
?2. Итак, вы спрашиваете, как рассчитать длину вектора?
3. Вероятно, вам следует использовать
Vector3
класс or Vector<T><T> вместоint[]
и использовать Vector3.Min или Vector.in чтобы найти минимальный вектор
Ответ №1:
Вы должны начать с реализации метода векторной длины:
private static double VectorLength(int[] v)
{
return Math.Sqrt(v[0]*v[0] v[1]*v[1] v[2]*v[2]);
}
тогда это просто функция минимального значения:
public static int[] FindShortest(int[][] vectors)
{
var minLength = double.MaxValue;
int[] minVec = Array.Empty<int>();
foreach(var v in vectors)
{
var vectorLength = VectorLength(v);
if (vectorLength < minLength) {
minLength = vectorLength;
minVec = v;
}
}
return minVec;
}
имейте в виду, что вы не проверяете, имеют ли векторы длину 3 и т. Д.
кроме того, вы можете просто использовать Vector3, если вас устраивает точность с плавающей точкой
Комментарии:
1. Могу ли я предложить вам применить фон к вашей графике? В темном режиме это выглядит так , что очень трудно читать.
2. Мог бы также просто сделать
var shortest = vectors.OrderBy(VectorLength).First();
3. да,
OrderBy
тоже работает, но примерно в 6 раз медленнее и потребляет больше памяти