C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で特定の円の2つの部分の角度の最小差を見つけるプログラム


この問題では、円の角度に基づいて円の一部を表す配列が与えられます。私たちのタスクは、C++で特定の円の2つの部分の角度の最小差を見つけるプログラムを作成することです

問題の説明 −配列内の円のすべての部分の角度が与えられます。作った2つのピースの角度の差が最小になるようにピースを結合する必要があります。

問題を理解するために例を見てみましょう

入力

ang[] = {90, 45, 90, 135}

C++で特定の円の2つの部分の角度の最小差を見つけるプログラム

出力

90

説明

1番目と2番目を一緒に取る、つまり90 + 45=135。

3番目と4番目を一緒に取る、つまり90 + 135 =225

差=225-135=90

ソリューションアプローチ

ここでは、すべてのパーツをマージして2つのパーツを作成する必要があります。そのためには、連続したパーツを使用する必要があります(この例では、ang1とang3を一緒に使用することはできません)。

part1の角度をAとしましょう。

その場合、part2の角度は360°Aになります。

違いは|A-(360-A)|になります。正の角度しか存在できないため、絶対値を採用しています。

差分方程式を解く

2 * | A --180 |、これは最小値である必要があります。そのために、円のすべての可能な部分をマージして、(2 * | A --180 |)の最小値を見つけようとします。

ソリューションの動作を説明するプログラム

#include <iostream>
#include <math.h>
using namespace std;
int CalcSmallDiffAng(int ang[], int n) {
   int Left = 0, A = 0, minDiff = 360;
   for (int i = 0; i < n; i++) {
      A += ang[i];
      while (A >= 180) {
         minDiff = min(minDiff, 2 * abs(180 - A));
         A -= ang[Left];
         Left++;
      }
      minDiff = min(minDiff, 2 * abs(180 - A));
   }
   return minDiff;
}
int main() {
   int ang[] = { 90, 45, 90, 135 };
   int n = sizeof(ang) / sizeof(ang[0]);
   cout<<"The smallest difference of angles of two parts of a given
   circle is "<<CalcSmallDiffAng(ang, n);
   return 0;
}

出力

The smallest difference of angles of two parts of a given circle is 90

  1. 与えられた2つの文字列で珍しい文字を見つけるC++プログラム

    この記事では、2つの異なる文字列を比較する際に、一般的でない文字を見つけるプログラムについて説明します。 ご存知のように、文字列は文字の配列に他なりません。したがって、比較のために、一方の文字列の文字をトラバースし、同時にその要素がもう一方の文字列に存在するかどうかを確認します。 最初の文字列をA、2番目の文字列をBとすると、 A-Bになります。 。同様に、B-Aを計算できます。 これらの両方の結果を組み合わせると、次のようになります ( A - B ) ∪ ( B - A ) つまり、両方の文字列の中で珍しい要素です。 例 #include <iostream>

  2. 与えられた複雑さの制約を持つn個の要素の2番目に小さいものを見つけるC++プログラム

    これは、与えられた複雑さの制約を持つn個の要素の中で2番目に小さい要素を見つけるためのC++プログラムです。 アルゴリズム Begin    function SecondSmallest() :       /* Arguments to this function are:          A pointer array a.          Number of elements n       */ &nb