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

C++でソートされた別の配列を作成できる配列の最大値


同じまたは異なる長さのArr1[]と別の配列Arr2[]という数字の配列が与えられます。 Arr1 []には、単一の要素がソートされていないように、昇順でソートされた要素があります。 2番目の配列Arr2[]から要素を見つけて、Arr1 []の誤って配置された要素を置き換え、ソートできるようにする必要があります。また、複数のオプションが利用可能な場合は、Arr2[]から選択される要素が最大になるはずです。

入力

Arr1[]= { 1,3,5,7,2,11 }, Arr2[]= { 4,8,7,10,9 }

出力

Maximum element that can make Arr1 sorted: 10

説明 − Arr1[]をソートできるArr2[]の番号− 8,9,10は、すべて>=7および<=11であるためです。これらの10のうち最大です。

新しいArr1[]は{1,3,5,7,10,11}になり、並べ替えられます。

入力

Arr1[]= { 12,5,22,17 }, Arr2[]= { 4,8,7,10,9 }

出力

No such element.

説明 −Arr2[]に>=12および<=22のアンバーはありません。

Arr1[]は並べ替えることができません。

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

  • 配列arr1[]およびarr2[]は、数値を格納するために使用されます。 Arr1 []は、1つの要素を除いて昇順で並べ替えられます。

  • 関数sortMax(int arr1 []、int arr2 []、int n1、int n2)は、配列とその長さの両方を取り、arr2 []の要素が最大であり、arr [] <の誤った要素を置き換えることができる場合、arr1[]を更新します。 / P>

  • 間違って配置された要素のインデックスを変数wposのarr1[]に格納します。最初は-1です。

  • maxxは、arr1[]の誤って配置された要素を置き換えて並べ替えることができるarr2[]の要素の中で最大値を格納するために使用されます。

  • 最初にarr1[]をトラバースし、そのような誤った要素を見つけます。 arr [i]

  • 次に、arr2 []をトラバースし、arr1[wpos-1]とarr[wpos+1]の間に配置できる要素を見つけます。また、そのような要素が存在する場合は、maxxのような要素と比較してください。

  • 最大更新。

  • 最後に、arr1[wpos]をmaxxに置き換えます。

  • そのような要素が見つかった場合はmaxxを返し、そうでない場合は-1を返します。

  • 要素が見つからない場合は、メッセージを表示します。

  • それ以外の場合は、ソートされたarr1[]を印刷します。

// C++ program to make array sorted
#include <bits/stdc++.h>
using namespace std;
int sortMax(int arr1[], int arr2[], int n1, int n2) //making arr1 sorted{
   int wpos=-1;
   int maxx=-1;
   int i,j;
   for(i=0;i<n1;i++)
   if(arr1[i]<arr1[i-1])
      wpos=i;
   for(j=0;j<n2;j++){
      if(arr2[j]>=arr1[wpos-1] && arr2[j]<=arr1[wpos+1])
         if(arr2[j]>=maxx)
            maxx=arr2[j];
   }
   if(maxx!=-1)
      arr1[wpos]=maxx;
   return maxx;
}
int main(){
   int arr1[] = { 1, 3, 7, 4, 10 };
   int arr2[] = { 2, 1, 6, 8, 9 };
   int len1 = sizeof(arr1) / sizeof(arr1[0]);
   int len2 = sizeof(arr2) / sizeof(arr2[0]);
   int res=sortMax(arr1, arr2, len1, len2);
   if(res==-1)
      cout<<"No swap possible! No such element!";
   else{
      cout<<"Maximum in arr2[] to make arr1[] sorted:"<<res;
      cout<<endl<<"Arr1[]:";
      for(int i=0;i<len1;i++)
         cout<<arr1[i]<<" ";
         cout<<endl<<"Arr2[]:";
      for(int i=0;i<len2;i++)
         cout<<arr2[i]<<" ";
   }
}

出力

Maximum in arr2[] to make arr1[] sorted:9
Arr1[]:1 3 7 9 10
Arr2[]:2 1 6 8 9

  1. C++で特定の数の数字を使用して形成できる最大数を見つけます

    n桁の数字があるとします。その数のすべての桁を使用して取得できる最大数を見つける必要があります。したがって、番号が339625の場合、最大数は965332になります。 この問題から、数字を昇順ではなく簡単に並べ替えてから印刷できることがわかります。しかし、より効率的な方法でこれを解決できます。サイズ10の配列を1つ作成して各桁の頻度を格納し、それに応じて9から0までの数値を出力できます。 例 #include <iostream> #include <string> using namespace std; int maxNumFromNum(int num) { &

  2. C++でオーバーロードできない関数

    C ++では、関数をオーバーロードできます。ただし、オーバーロードが行われない場合もあります。このセクションでは、関数をオーバーロードできないさまざまなケースについて説明します。 関数のシグネチャが同じである場合、戻り値のタイプのみが異なるため、関数をオーバーロードすることはできません。 int my_func() {    return 5; } char my_func() {    return 'd'; } メンバー関数がクラス内で同じ名前と同じパラメーターリストを持っている場合、それらをオーバーロードすることはで