在 C++ 中找到给定 N 个三角形中的唯一三角形的数量


本题中,我们给出三个大小为 N 的数组 s1[]、s2[] 和 s3[],表示 N 个三角形。我们的任务是找到给定的 N 个三角形中的唯一三角形的数量。

一个三角形要唯一,它的所有边都应该是唯一的,即没有其他三角形具有相同的边。

我们举个例子来理解一下这个问题,

输入

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

输出

1

说明

边长为 1 2 4 的三角形是唯一的。

解决方案方法

一个简单的解决方案是计算唯一三角形的数量。

为此,我们首先对每个三角形的边进行排序,然后存储到映射中,如果它的值是唯一的,则增加计数。

说明我们解决方案工作原理的程序,

示例

 实时演示

#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

更新于: 15-Mar-2021

242 浏览

开启你的 职业生涯

通过完成课程来获取认证

立即开始
广告
© . All rights reserved.