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

C++で数字を置き換えた2つの数値の最大値と最小値の合計


2つの正の数num1とnum2が与えられます。目標は、両方の数字を置き換えた後、これら2つの可能な最小合計と最大合計を見つけることです。両方の数字のそれぞれの数字の数字を置き換えることができます。 num1が434、num2が324で、数字3を4に、数字4を3に置き換えることができるとします。その場合、最小合計は-333 + 323 =656になり、最大合計は444 + 424=864になります。

数字を3から4に、またはその逆に置き換える例を使って理解しましょう-

入力

num1=3224 num2=4321

出力

Maximum sum is : 8645
Minimum sum is : 6544

説明 − 4が3より大きいため、すべての3を4に置き換えて、両方の数値を大きくします。

num1は4224になり、num2は4421になり、合計は8645になります。4をすべて3に置き換えて、3が4より小さいため、両方の数値を小さくします。

num1は3223になり、num2は3321になり、合計は6544になります

入力

num1=3111 num2=4111

出力

Maximum sum is : 8222
Minimum sum is : 6222

説明 − 4が3より大きいため、すべての3を4に置き換えて、両方の数値を大きくします。

num1は4111になり、num2は4111になり、合計は8222になります。すべての4を3に置き換えて、3が4より小さいため、両方の数値を小さくします。

num1は3111になり、num2は3111になり、合計は6222になります

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

  • 番号は変数num1とnum2にあります。

  • 関数calculateSum(int n1、int n2)は、桁置換後の数値の最小および最大の合計を計算するために使用されます。

  • パラメータとして2つの数値n1とn2を取り、minSumとmaxSumに格納された結果を表示します。

  • 最初に、両方の数値の4ごとに3を置き換え、両方に対してreplace(n1,4,3)とreplace(n2,4,3)をそれぞれ呼び出すことにより、num2とnum2に新しい値を格納します。

  • 新しいnum1とnum2を追加して、最小合計を計算します。

  • 同様に、replace(n1,3,4)とreplace(n2,3,4)を呼び出して上記の手順を繰り返し、3ごとに4を置き換えて、最大合計を計算します。

  • 関数replace(int x、int digit1、int digit2)は、xのすべてのdigit1をdigit2に置き換え、新しい数値を返します。

  • 変数numberは、0で初期化された、新しく取得された番号を格納します。

  • tempは、反復ごとに乗数を10ずつ格納するために使用されます。

  • xを10で割り、余りをremに格納することにより、右手から各桁を取得します。

  • remがdigit1と等しい場合は、digit2に置き換えます。これを追加して、新しい数値=数値+ Digit2 * temp;

    を取得します
  • それ以外の場合、変更はありませんnumber =number + rem * temp;

  • xを10で割って減らし、乗数を10増やします。(remp =temp * 10)

  • 得られた番号を返します。

#include<bits/stdc++.h>
using namespace std;
//replace digit1 with digit2
int replace(int x, int digit1, int digit2){
   int number = 0;
   int temp = 1;
   while (x > 0){
      int rem = x % 10;
      // Required digit found, replace it
      if (rem == digit1)
         number = number + digit2 * temp;
      else
         number = number + rem * temp;
         temp *= 10;
         x = x / 10;
      }
      return number;
   }
   void calculateSum(int n1, int n2){
      //replace 4 by 3
      int num1=replace(n1,4,3);
      int num2=replace(n2,4,3);
      int minSum=num1+num2;
      //replace 3 by 4
      num1=replace(n1,3,4);
      num2=replace(n2,3,4);
      int maxSum=num1+num2;
      std::cout << "Minimum Sum by digit replacement: " << minSum;
      std::cout << "\nMaximum Sum by digit replacement: " << maxSum;
}
int main(){
   int num1 = 3131, num2 = 4141;
   calculateSum(num1, num2);
   return 0;
}

出力

Minimum Sum by digit replacement: 6262
Maximum Sum by digit replacement: 8282

  1. 最大サイズ2の最小パーティションと、C++で指定された値によって制限される合計

    問題の説明 正の数の配列arr[]が与えられた場合、次のプロパティを満たす配列内のセットの最小数を見つけます。 セットには、最大2つの要素を含めることができます。 2つの要素は連続している必要はありません。 セットの要素の合計は、指定されたキー以下である必要があります。与えられたキーが最大の配列要素以上であると想定される場合があります。 例 arr [] ={1、2、3、4}およびk =5の場合、次の2つのペアを作成できます- {1、4}および{2、3} アルゴリズム 配列を並べ替える ソートされた配列の2つのコーナーから2つのポインターを開始します。それらの合計が指定されたキー

  2. 合計と積が両方ともNと同じである2つの数値を見つけるC++プログラム

    このチュートリアルでは、両方が次のようになる2つの数字(たとえば「a」と「b」)を見つけるプログラムについて説明します a+b = N and a*b = N are satisfied. 両方の方程式から「a」を削除すると、「b」と「N」の2次方程式が得られます。つまり b2 - bN + N = 0 この方程式には、「a」と「b」の両方の値を与える2つの根があります。行列式を使用して根を見つけると、「a」と「b」の値が次のようになります。 $ a =(N- \ sqrt {N * N-4N)} / 2 \\ b =(N + \ sqrt {N * N-4N)} / 2 $ 例 #i