Мой вариант:
1) сложить все x|y|z точек и поделить на N. Получим cx, cy, cz
2) Перебрать все точки, находить растояние от неё до С. r = (cx-x)^2+(cy-y)^2+(cz-z)^2
(корень убрать для скорости)
3) та, у которой r минимальна - исходная
upd: вот накатал =)
#include <cstdio>
struct point
{
float x, y, z;
point()
{
x = 0;
y = 0;
z = 0;
}
};
float get_r(point a, point b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z);
}
int main()
{
int n;
scanf("%d", &n);
point c;
point *mas = new point[n];
for(int i = 0; i < n; i++)
{
scanf("%f %f %f", &mas[i].x, &mas[i].y, &mas[i].z);
c.x += mas[i].x;
c.y += mas[i].y;
c.z += mas[i].z;
}
c.x /= n;
c.y /= n;
c.z /= n;
float min_r = get_r(mas[0], c);
int min_i = 0;
for(int i = 1; i < n; i++)
{
float r = get_r(mas[1], c);
if(r < min_r)
{
min_r = r;
min_i = i;
}
}
printf("\n%f %f %f\n", mas[min_i].x, mas[min_i].y, mas[min_i].z);
return 0;
}