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

C++で有効な三角形のトリプレットの数を数えるプログラム


数の配列があるとすると、三角形の辺の長さとして取ると、三角形を作ることができる配列から選択されたトリプレットの数を見つける必要があります。したがって、入力が[2,2,3,4]の場合、最初の2を使用する3つのトリプレット[2,3,4]、2番目の2を使用する[2,3,4]があるため、結果は3になります。 [2,2,3]。

これを解決するには、次の手順に従います-

  • ret:=0、n:=numのサイズ、numの並べ替え

  • n −1から0までの範囲のiの場合

    • 右:=i − 1、左:=0

    • 左<右

      • 合計:=nums[左]+nums[右]

      • sum> nums [i]の場合、retを右-左に増やし、右を1減らし、それ以外の場合は左を1増やします

  • retを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int triangleNumber(vector<int>& nums) {
      int ret = 0;
      int n = nums.size();
      sort(nums.begin(), nums.end());
      for(int i = n − 1; i >= 0; i−−){
         int right = i − 1;
         int left = 0;
         while(left < right){
            int sum = nums[left] + nums[right];
            if(sum > nums[i]){
               ret += right − left;
               right−−;
            }else left++;
         }
      }
      return ret;
   }
};
main(){
   vector<int> v = {2,2,3,4};
   Solution ob;
   cout << (ob.triangleNumber(v));
}

入力

[2,2,3,4]

出力

3

  1. サイズdで作成できる十二角形の数をカウントするC++プログラム

    数dがあるとします。正方形のタイルと辺の長さが1の通常の三角形のタイルが無数にあると考えてください。これらのタイルを使用して、側面dの通常の十二角形(12辺の多角形)を形成できる方法をいくつ見つける必要があります。答えが大きすぎる場合は、結果mod998244353を返します。 ステップ これを解決するために、次の手順に従います- b := floor of d/2 - 1 c := 1 for initialize i := 2, when i < d, update (increase i by 1), do:    b := b * (floor of

  2. C++でバイナリ行列をゼロ行列に変換する演算の数をカウントするプログラム

    バイナリ行列があるとします。ここで、1つのセルを取得し、そのセルとそのすべての隣接セル(上、下、左、右)を反転する操作について考えてみます。行列に0のみが含まれるように、必要な操作の最小数を見つける必要があります。解決策がない場合は、-1を返します。 したがって、入力が次のような場合 0 0 1 0 その場合、出力は3になります。 これを解決するには、次の手順に従います- サイズの配列ディレクトリを定義します:4 x 2:={{1、0}、{0、1}、{-1、0}、{0、-1}} const int inf =10 ^ 6 関数getP