matlabcody一些题
自己写的…%初始化M = 9;N = 9;%创建 9x9 矩阵I = [ 2 3 3 5 1 4 9 2 3 9 ];J = [ 1 1 4 4 5 5 6 8 8 9 ];%-1 的坐标[p,o] = size(I); leni = p*o;x = zeros(M,N);l = 1;%创建矩阵,把 -1 放进去for s = 1:leniS = I(s);L = J(l);x(S,L) = -1
Problem 173. Minefield Sonar
自己写的…
%初始化
M = 9;N = 9;%创建 9x9 矩阵
I = [ 2 3 3 5 1 4 9 2 3 9 ];J = [ 1 1 4 4 5 5 6 8 8 9 ];%-1 的坐标
[p,o] = size(I); leni = p*o;
x = zeros(M,N);
l = 1;
%创建矩阵,把 -1 放进去
for s = 1:leni
S = I(s);
L = J(l);
x(S,L) = -1;
l = l+1;
end
%检测 -1 点的坐标,是否在两边,是则跳过
%不是,再判断周围(h,g)代入有无负一,有,跳过,无,周围加一。
for i = 1:leni
j = I(i);
k = J(i);%负一所在的坐标
sd = 0;
for h = j-1:j+1
for g = k-1:k+1
sm = ( ((0<h)&(h<M+1)) && ((0<g)&(g<N+1)) );%判断在两边
if (sm)
sd = (not ( (x(h,g) == -1)) ); %任意值等于负一跳过
if (sd)
x(h,g) = x(h,g) + 1;
%g
% h
end
end
end
end
end
x
大佬写的…
I = [ 2 3 3 5 1 4 9 2 3 9 ];
J = [ 1 1 4 4 5 5 6 8 8 9 ];
M = 9; N = 9;
map = zeros(M, N)
map(sub2ind([M N], I, J)) = 1
y = conv2(map, ones(3), 'same')
y(map==1) = -1
Problem 43236. Find my daddy long leg (No ‘s’)
y=sqrt(x^2/(1+ratio^2))*ratio
想了一大堆正余弦定理还有海伦公式,结果好像就是个直角三角形。。。
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.
给一个周长 p,让你返回所有能组成直角三角形的三边长并弄到元组里,里面还得从小到大排序。
那就直接两次 for 循环呗,第二个 for 用的第一个 for 的值
先找关系,a+b>d a+b+d=p 所以每一边都是小于p/2的,这应该能省点事。
因为要输出的元组是 c 所以把 c 边改为 d 了==
function c = right_triangle_sides(p)
count = 0;
for a = 1:p/2
for b = a:p/2
d = p-a-b;
if (d^2 == (b^2+a^2))
count = count+1;
c{1,count} = [a b d]
end
end
end
end
Problem 558. Is the Point in a Triangle?
给一组点和三角形三个顶点坐标,判断这组点在不在三角形内。
本来想着算点到各边的距离,然后到求解各边直线方程出现了点问题。后来又想着以一点为坐标轴原点,构建一个矩形把三角形包在里面,矩形外的直接判断为在外面,矩形内三角形外的判断点发出射线与三角形是否有俩交点,但是好像也挺麻烦…
所以直接套了评论区的答案
看了一下别的答案好像没这个好懂
for i = 1:size(Points,1) %遍历要测的点
po = Points(i,:); %测量点的坐标
%三个顶点的坐标
p1=Triangle(1,:);
p2=Triangle(2,:);
p3=Triangle(3,:);
%三条边长
a = sqrt((p1(1)-p2(1))^2+(p1(2)-p2(2))^2);
b = sqrt((p1(1)-p3(1))^2+(p1(2)-p3(2))^2);
c = sqrt((p3(1)-p2(1))^2+(p3(2)-p2(2))^2);
%测量点到三边的距离
d1=sqrt((p1(1)-po(1))^2+(p1(2)-po(2))^2);
d2=sqrt((p2(1)-po(1))^2+(p2(2)-po(2))^2);
d3=sqrt((p3(1)-po(1))^2+(p3(2)-po(2))^2);
y(i)=0;
%判断点与任意两点的夹角
alpha = rad2deg(acos((d1^2+d2^2-a^2)/(2*d1*d2)));
beta = rad2deg(acos((d1^2+d3^2-b^2)/(2*d1*d3)));
gamma = rad2deg(acos((d2^2+d3^2-c^2)/(2*d2*d3)));
if(alpha+beta+gamma==2*180)
y(i)=1;
end
end
然后
发现了一个更简单的答案
凸包的意思大概就是边缘的几个点撑起来的的多边形,反正这里只是三角形感觉不用太深入研究…
Triangle = [0, 0; 1, 0; 1, 1];
%Points = [0, 0.5];
%Points = [-4,-3];
Points = [0.4,0.1];
m = size(Points,1) %待求点的行数
n = convhull([Triangle;Points])
%返回点 xy 的二维凸包的索引如果点在外面,其索引就是 4,所以会返回 4
~ismember(4:3+m,n)
%因为把待求点加在三角形矩阵后面了,
%索引是 4 之后的所以只要存在 4 之后的索引,必在三角形外面。
Problem 43294. Can we make a triangle?
两边之和大于第三边,不过刚开始写 if 语句漏了相等的情况,所以如果有两边和等于第三边的就判成 true 了
if (a+b<=c)
flag = 0
elseif (a+c<=b)
flag = 0
elseif (b+c<=a)
flag = 0
else flag = true
end
Problem 42855. Height of a right-angled triangle
已知三边 ,求直角三角形斜边上行的高
测试的时候,得判断三边长大于 0…还有得判断是直角三角形
y = NaN
if [a,b,c]>0
if (a^2+b^2==c^2)
y = a*b/c
end
end
更多推荐



所有评论(0)