CODYコンテスト2020の基本-三角形9の質問

第一题問題769。3点間の三角形の面積を計算する

3点間の三角形の面積を計算します。

P1(X1、Y1)

P2(X2、Y2)

P3(X3、Y3)

これらの3つの点は、三角形の頂点です。

三角形の3点の座標を指定して、領域を見つけます。

まず、3点間の距離P1〜P3、つまり三角形の辺の長さを見つけ、それをdベクトルに格納します。次に、三角形の周囲pの半分がdの合計の半分になることを見つけます。つまり、p = sum(d)/ 2;次に、Helenの式によれば、s = sqrt(p *(pa)*(pb)*(pc))、abcはd(1)-d(3)に対応するため、 :

% X=[x1 x2 x3]
% Y=[y1 y2 y3]
function y = your_fcn_name(X,Y)
  for i=1:3
      d(i)=sqrt((X(i)-X(mod(i,3)+1))^2+(Y(i)-Y(mod(i,3)+1))^2);
  end
  p=0.5*sum(d);
  y=sqrt(p*(p-d(1))*(p-d(2))*(p-d(3)));
end

2番目の質問問題2017。正三角形の辺

正三角形の面積がAの場合、その各辺の長さxはどれくらいですか?

正三角形の面積はAです。辺の長さxを見つけます。正三角形の面積の式に従って,,,そう

 
function x = side_length(A)

    x = sqrt(4*A/sqrt(3));

end

問題2023。この三角形は直角ですか?

任意の3つの正の数a、b、cが与えられた場合、辺がa、b、cの三角形が直角の場合はtrueを返します。それ以外の場合は、falseを返します。

辺の長さがa、b、cの場合、形成された三角形が直角三角形であるかどうかを判断します。cは斜辺ではないことに注意してください。

したがって、abcの最大の辺を斜辺として、他の2つの短辺を直角の辺として見つけ、ピタゴラスの定理を使用して判断する必要があります。

function flag = isRightAngled(a,b,c)

    abc=[a,b,c];

    max_abc=max(abc);

    flag =(max_abc)^2==sum(abc(abc<max_abc).^2);

end

4番目の質問問題43236。私のパパの長い脚を見つけてください(いいえ)

2本の脚の比率(長い/短い)と斜辺の長さを考慮して、大きい方の脚の値を見つけます。

2つの短辺の比率(1より大きい)と斜辺の長さ(最長の辺)を考慮して、短辺の大きい方の辺を見つけます。タイトルには直角三角形は記載されていませんが、斜辺(hypotenuse)は直角三角形の概念であるため、ピタゴラスの定理によれば、斜辺xと直角辺の比率がわかります。最短辺はyで、次にy ^ 2 + ratio ^ 2y ^ 2 = x ^ 2;

y = x / sqrt(1 + ratio ^ 2);長辺はratio * yです。

function y = myDaddyLongLeg(x,ratio)
  y = ratio*x/sqrt(1+ratio^2);
end

第五题問題1103.直角三角形の辺の長さ(プロジェクトオイラー問題39に触発された)

pが整数の長さの辺{a、b、c}を持つ直角三角形の周囲長である場合、p = 120に対して正確に3つの解があります。

{[20,48,52]、[24,45,51]、[30,40,50]}

pの任意の値を指定して、要素が周囲長がpである可能性のある直角三角形のソートされた辺の長さであるセル配列を返します。さらに、出力の要素は、最短の辺の長さで並べ替える必要があります。

pが直角三角形の周囲長である場合、pの周囲長を満たす3つの直角三角形があります。pが与えられた場合、1:nセルを返します。これは、合計n個の直角三角形の周囲がpであり、セルの各要素がベクトルであり、3つの辺の長さを節約し、小さいものから大きいものへと配置することを意味します。一辺の長さは整数であることに注意してください。

この質問は、オイラープロジェクトの9番目の質問から派生しています。これは、元の質問の出力3辺の積を変更して、満足するすべての三角形の辺の長さを保存することです。以前、オイラーの10の質問の9番目の質問では、方法は短辺の長辺bの範囲を計算することでした。この質問は短辺を並べ替える必要があるため、aの範囲を計算するように変更されました。 bと同様に、a範囲は1:floor(p /(sqrt(2)+2))、次にaをトラバースします。bは(p ^ 2-2 * a * p)/(2 * p- 2 * a)、bを判断します。整数の場合は、[a、b、c]を保存します。セルの使用量が少ないため、最初にすべての辺の長さをn * 3の行列dに格納します。 、次に、行列の各行をc要素として使用します。

function c = right_triangle_sides(p)
    k=1;
    for a=1:floor(p/(sqrt(2)+2))
        b=(p^2-2*a*p)/(2*p-2*a);
        if mod(b,1)==0
            d(k,1:3)=[a,b,sqrt(a^2+b^2)];
            k=k+1;
        end
    end
    c=cell(1,k-1);
    for i=1:k-1
        c{i}=d(i,:);
    end
end

問題558.ポイントは三角形になっていますか?

1つのポイントまたは複数のポイントが3つの角を持つ三角形にあるかどうかを確認します

ポイント= [x、y];

三角形= [x1、y1; x2、y2; x3、y3]

テストされた各ポイントに対してtrueまたはfalseを返します。

例えば、

入力:ポイント= [0、0.5]; 三角形= [0、0; 1、0; 1、1]

出力:y = 0;

質問の意味を読む前に何をすべきかを知っています。三角形の3つの点の座標が与えられたら、与えられた点の座標が三角形の内側にあるかどうかを判断します(質問の意味が入っているので、押して側面を考慮しないでください)

正直なところ、数学はほとんど忘れられています。pが三角形ABCにある場合、PとABCの間の角度の合計は180度です。これを覚えておいてください。

各点Pについて、与えられた3つの点ABCの座標がPの座標から差し引かれ、PA PB PCの3つのベクトルが得られ、3つのベクトル間の角度が求められます。theta= acos(dot(a、b) / norm(a、2)/ norm(b、a))。aとbはそれぞれ2つのベクトルです。次に、夾角の合計が2piであるかどうかを判断します。丸めと切り捨てのエラーのため、判断が等しい場合はエラー範囲を指定する必要があります。

function y = your_fcn_name(Points, Triangle)
    y=zeros(1,size(Points,1));
    for i=1:size(Points,1)
        p=Triangle-Points(i,:);
        for j=1:3
            theta(j)=acos(dot(p(j,:),p(mod(j,3)+1,:))/norm(p(j,:),2)/norm(p(mod(j,3)+1,:),2));
        end
        if abs(sum(theta)-2*pi)<=1e-5
            y(i)=1;
        end
    end
end

pは、点Pから3点までのベクトルを表します。シータは、3つのベクトルの2行2列の角度を格納します。

質問7問題42855。直角三角形の高さ

数値a、b、cが与えられた場合、底辺cについて、辺aとb、斜辺cを持つ直角三角形の高さを求めます。辺aとb、斜辺cの直角三角形が存在しない場合は、NaN(非数)を返します。

abcの3つの辺が与えられた場合、斜辺としてcを使用してa、b、およびcで形成される直角三角形を見つけ、底辺cの高さを見つけます。そのような直角三角形がない場合は、Nanを返します。

直角三角形の面積はS = 1/2 * a * b = 1/2 * c * h、hはcの底の高さなので、h = a * b / cなので、最初にピタゴラスの定理による直角三角形です。次にhを計算します。

善人のテストサンプルは武道について話していません、そしてabcでさえ0または否定的です。1つずつ判断するのは少し面倒です。nanの条件を追加するだけです。sum([a、b、c] <= 0)> 0、つまりabcの数が0以下かどうかを判断します。 0より大きい。

function h = triangle_height(a, b, c)
  if a^2+b^2~=c^2 || sum([a,b,c]<=0)>0
      h=nan;
  else
      h=a*b/c;
end

第八题問題43599。底辺から頂点までの面積と高さを指定して、二等辺三角形の辺を見つけます。

二等辺三角形の面積と底辺から頂点までの高さを指定して、二等辺三角形の辺を見つけます。

たとえば、A = 12およびh = 4の場合、結果は[5 56]になります。

二等辺三角形の面積と底辺の高さを考慮して、3つの辺を返します。

テストサンプルは、出力と実際の値の絶対差の合計であるため、順序が必要です。テストサンプルの順序は、最初の2つがウエストの長さ、3番目がベースの長さです。

面積と高エネルギーに応じて、下端を見つけ、下端と高さの半分をピタゴラスの定理で到達可能なウエストとして使用します。

function y = sidesOfTheTriangle(A,h)
  c=A*2/h;
  a=sqrt(0.25*c^2+h^2);
  y=[a a c];
end

質問9問題43294。三角形を作ることはできますか?

3つの正の数が与えられた場合、これらの辺の長さで三角形を作成できるかどうかを確認します。三角形では、2つの辺の合計が3番目の辺よりも大きくなる必要があることに注意してください。したがって、長さが2、3、6の場合、三角形を作成することはできません。

3つの正の数を与え、それらを辺の長さとして使用して三角形を形成できるかどうかを判断します。3つの数値を並べ替えて、2つの小さい数値の合計が最大の数値より大きいかどうかを判別します。

実際、あなたは最大のものを見つける必要があるだけです:それで私はaとbの最大値がcより大きいかどうかを判断します、それがcより大きい場合、cはaとbの最大値ですそしてそれからどちらがaとbより大きい場合は、大きい方を置き換えます。変更前のcの値、つまりcの数と最大値が交換されます。

次に、a + b> cを判断します。

function flag = Is_Triangle(a, b, c)
  if max([a,b])>c
      tmp=c;
      c=max([a,b]);
      if a>b
          a=tmp;
      else 
          b=tmp;
      end
  end
      flag=a+b>c;
end

 

おすすめ

転載: blog.csdn.net/qq_36614557/article/details/110817942