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

C++で指定されたN個の三角形の中から一意の三角形の数を見つけます


この問題では、サイズNの3つの配列s1 []、s2 []、およびs3 []が与えられ、N個の三角形を示します。私たちのタスクは、与えられたN個の三角形の中から一意の三角形の数を見つけることです。

三角形が一意であるためには、そのすべての辺が一意である必要があります。つまり、他の三角形が同じ辺を持つべきではありません。

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

入力

s1[] = {1, 5, 3}
s2[] = {2, 3, 2}
s3[] = {4, 2, 5}

出力

1

説明

辺が124の三角形はユニークです。

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

この問題の簡単な解決策は、一意の三角形の数を数えることです。

このために、最初に各三角形の辺を並べ替えてから、マップに保存します。値が一意である場合は、カウントを増やします。

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

#include <bits/stdc++.h>
using namespace std;
int countUniqueTriangle(int a[], int b[], int c[], int n) {
   vector<int> triSides[n];
   map<vector<int>, int> m;
   for (int i = 0; i < n; i++) {
      triSides[i].push_back(a[i]);
      triSides[i].push_back(b[i]);
      triSides[i].push_back(c[i]);
      sort(triSides[i].begin(), triSides[i].end());
      m[triSides[i]] = m[triSides[i]] + 1;
   }
   map<vector<int>, int>::iterator itr;
   int uniqueTriCount = 0;
   for (itr = m.begin(); itr != m.end(); itr++) {
      if (itr->second == 1)
         if (itr->second == 1)
            uniqueTriCount++;
   }
   return uniqueTriCount;
}
int main() {
   int s1[] = { 1, 5 ,3 };
   int s2[] = { 2, 3, 2 };
   int s3[] = { 4, 2, 5 };
   int N = sizeof(s1) / sizeof(s1);
   cout<<"The number of unique triangles is "<<countUniqueTriangle(s1, s2, s3, N);
   return 0;
}

出力

The number of unique triangles is 1

  1. 与えられた主要な仮説を反証する数を見つけるためのC++コード

    数nがあるとします。 「正の整数mごとに素数(n・m + 1)である正の整数nが存在する」という仮説があるとします。この声明を反証するには、カウンターの例などのmを見つける必要があります。 したがって、入力がn =12の場合、12 * 10 + 1 =121であり、プライムではないため、出力は10になります。 ステップ これを解決するには、次の手順に従います- if n < 3, then:    return n + 2 Otherwise    return n - 2 例 理解を深めるために、次の実装を見てみましょう- #include

  2. 与えられたグラフのブリッジエッジの数を見つけるためのC++プログラム

    n個の頂点とm個のエッジを含む重み付けされていない無向グラフが与えられたとします。グラフのブリッジエッジは、グラフを削除するとグラフが切断されるエッジです。与えられたグラフでそのようなグラフの数を見つける必要があります。グラフには、平行なエッジや自己ループは含まれていません。 したがって、入力がn =5、m =6、edges ={{1、2}、{1、3}、{2、3}、{2、4}、{2、5}、{3 、5}}の場合、出力は1になります。 グラフには、{2、4}のブリッジエッジが1つだけ含まれています。 これを解決するには、次の手順に従います- mSize := 100 Define an