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

ソートされた二重リンクリスト内のトリプレットをカウントします。このリストの積は、C++で指定された値xに等しくなります。


整数値を含むソートされた二重リンクリストが与えられます。目標は、積が与えられた値xに等しいトリプレットを見つけることです。入力リンクリストが3−4−1−2で、xが6の場合、カウントは1になります(トリプレット(3,1,2))

ソートされた二重リンクリスト内のトリプレットをカウントします。このリストの積は、C++で指定された値xに等しくなります。

入力
linked list: [ 200−4−16−5−10−10−2 ] x=200

出力

Count of triplets in a sorted doubly linked list whose product is equal to a given
value x are: 3

説明

Triplets will be:
(4,5,10), (4,5,10) and (10,10,2)

入力

linked list: [ 4−3−1−5−2−4−2] x=12

出力

Count of triplets in a sorted doubly linked list whose product is equal to a given
value x are: 3

説明

Triplets will be:
(4,3,1), (3,1,4) and (3,2,2)

以下のプログラムで使用されるアプローチは次のとおりです

このアプローチでは。

  • リンクリストノードを、intデータ部分と自己参照の次および前のポインタを含む構造体として使用しています

  • 関数insert_node(struct block ** head、int data)は、リンクリストの先頭にあるノードをデータとともに追加します。

  • 関数Product_x(struct block * head、int x)は、二重リンクリストと整数xの先頭へのポインターを受け取り、データ部分の積をxとして持つノードのトリプレットの数を返します。

  • 初期カウントを0とします。

  • タイプstructblockの3つのポインターtemp_1、temp_2、temp_3を取ります。

  • リンクリストの先頭を指すtemp_1、temp_1の隣を指すtemp_2、temp_3の隣を指すtemp_3から始めて、最初の3つのノードを指す3つのポインターがあります。

  • 最後のノードまでこれらのポインタを使用してトラバースします。

  • 上記のすべてのポインタの現在のデータ部分の積がxである場合。 ((temp_1−> data * temp_2−> data * temp_3−> data)==x)次にカウントをインクリメントします。

  • 最後に、トリプレットの数を数え、カウントに保存しました。

  • 結果としてカウントを返します。

#include <iostream>
using namespace std;
struct block{
   int data;
   struct block *next, *prev;
};
void insert_node(struct block** head, int data){
   struct block* ptr = new block();
   ptr−>data = data;
   ptr−>next = NULL;
   ptr−>prev = NULL;
   if ((*head) == NULL){
      (*head) = ptr;
   } else {
      ptr−>next = *head;
      (*head)−>prev = ptr;
      (*head) = ptr;
   }
}
int Product_x(struct block* head, int x){
   int count = 0;
   struct block *temp_1, *temp_2, *temp_3;
   for (temp_1 = head; temp_1!= NULL; temp_1 = temp_1−>next){
      for (temp_2 = temp_1−>next; temp_2 != NULL; temp_2 = temp_2−>next){
         for (temp_3 = temp_2−>next; temp_3!= NULL; temp_3 = temp_3−>next){
            if ((temp_1−>data * temp_2−>data * temp_3−>data) == x){
               count++;
            }
         }
      }
   }
   return count;
}
int main(){
   struct block* head = NULL;
   insert_node(&head, 200);
   insert_node(&head, 100);
   insert_node(&head, 16);
   insert_node(&head, 14);
   insert_node(&head, 10);
   insert_node(&head, 10);
   insert_node(&head, 2);
   int x = 200;
   cout<<"Count of triplets in a sorted doubly linked list whose product is equal to a given value
   x are: "<<Product_x(head, x);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Count of triplets in a sorted doubly linked list whose product is equal to a given value x are : 1

  1. 合計がC++の指定された値xに等しい2つのBSTからペアをカウントします

    入力として2つの二分探索木と変数xが与えられます。目標は、ノードの値の合計がxに等しくなるように、各ツリーからノードのペアを見つけることです。 BST_1からノード1を取得し、BST_2からノード2を取得して、両方のデータ部分を追加します。 sum=xの場合。インクリメントカウント。 例を挙げて理解しましょう。 入力 出力 −合計が特定の値xに等しい2つのBSTからのペアの数は− 1 説明 −ペアは(8,6) 入力 出力 −合計が特定の値xに等しい2つのBSTからのペアの数は− 2 説明 −ペアは(5,15)と(4,16) 以下のプログラムで使用されているアプ

  2. C++でソートおよびローテーションされたリンクリストのローテーションをカウントします

    リンクリストが表示されます。リストは最初にソートされ、次にK個のノードでローテーションされます。目標は、Kの値を見つけることです。K個のノードだけ回転する入力としてリンクリストを以下に示す場合- それならオリジナルは-だったに違いない ここでKは2であることがわかります。入力リンクリストは、元のソートされたリンクリストの2ノードのローテーションです。 例を挙げて理解しましょう。 入力 −リスト:5→7→9→1→3 出力 リンクリストの要素は次のとおりです。5791 3 ソートおよびローテーションされたリンクリストのローテーション数は-3 説明 −元のソート済み