题目
来源于Mathwork上的Cody,Problem 1103 - Right Triangle Side Lengths.
If p is the perimeter of a right angle triangle with integral length sides, { a, b, c }, there are exactly three solutions for p = 120.
{[20,48,52], [24,45,51], [30,40,50]}
Given any value of p, return a cell array whose elements are the sorted side lengths of a possible right triangle whose perimeter is p. Furthermore, the elements of the output should be sorted by their shortest side length.
代码
function c = right_triangle_sides(p)
c={};
m=1;
for i=round(p/3):p
A=(1:i).^2;
for j=1:i
if (sum(A(j)+(p-i-sqrt(A(j)))^2==i^2)>0) && (p-i-sqrt(A(j))>0)
c{m}=[sqrt(A(j)),p-i-sqrt(A(j)),i];
m=m+1;
break;
end
end
end
c=c(end:-1:1);
end
其它优秀代码
function c = right_triangle_sides(p)
c = {};
for x=1:p
for y=x:p
v=[x y hypot(x,y)];
if sum(v)==p
c = [c v];
end
end
end