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

C++で指定された桁数と桁数の合計で最大の数値を検索します


この問題では、2つの整数値が与えられます。Nは数値の桁数を示し、sumは数値の桁の合計を示します。私たちのタスクは、指定された桁数と桁数の合計で最大の数を見つけることです

問題を理解するために例を見てみましょう

Input : N = 3, sum = 15
Output : 960

ソリューションアプローチ

この問題を解決する簡単な方法は、N桁の数字すべてを最大から最小までトラバースすることです。合計が数値を返すのと等しい場合は、数字の合計数を見つけます。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
int digitSum(int n){
   int sum = 0; 
   while(n){
      sum += n%10; 
      n = n/10;
   }
   return sum;
}
int findLargestNumWithSum(int N, int sum){
   if (sum == 0){
      if(N == 1)
         return -1;
      else
         return -1;
   }
   if (sum > 9*N){
      return -1;
   }
   int num = 1;
   for(int i = 0; i < N; i++) 
      num *= 10;
   while(1){
      if(digitSum(num) == sum){
         return num;
      }
      num -- ;
      if(num == 0)
         return -1;
   }
}
int main(){
   int sum = 25, N = 3;
   cout<<"The largest "<<N<<" digit number with sum "<<sum<<" is "<< findLargestNumWithSum(N, sum);
   return 0;
}

出力

The largest 3 digit number with sum 25 is 997

この問題を解決する別のアプローチは、欲張りアプローチを使用することです。これを行うには、MSBから開始し、合計から可能な限り高い数値を配置し、合計から減算します。

このステップをN回実行し、必要な数を取得します。したがって、合計が9より大きい場合は、現在の桁に9を配置し、9未満の場合は、合計を現在の桁に配置します。 MSBからLSBまでのすべての数字に対して、このプロセスを実行します。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
int findLargestNumWithSum(int N, int sum){
   if (sum == 0){
      if(N == 1)
         return -1;
      else
         return -1;
   }
   if (sum > 9*N){
      return -1;
   }
   int num = 0;
   for (int i = 0; i < N; i++){
      if (sum >= 9){
         num += 9;
         sum -= 9;
         if(i < (N - 1)){
            num *= 10;
         }
      }
      else{
         num += sum;
         sum = 0;
         if( i < (N - 1)) 
             num *= 10;
      }
   }
   return num;
}
int main(){
   int sum = 25,
   N = 3;
   cout<<"The largest "<<N<<" digit number with sum "<<sum<<" is "<<findLargestNumWithSum(N, sum);
   return 0;
}

出力

The largest 3 digit number with sum 25 is 997

  1. xとその桁の合計がC++で指定されたnと等しくなるような数xを見つけます

    ここで、1つの問題が発生します。ここで、数値nを取得する場合、x +桁の合計xが指定された数値nと同じになるように、xなどの別の値を見つける必要があります。 nの値が21であると仮定します。このプログラムは、15+桁の合計15、つまり15 + 1 + 5 =21=nとして数値x=15を返します。 この問題を解決するには、単純なアプローチに従う必要があります。 1からnまで繰り返し、各繰り返しで、数値とその桁の合計の合計が数値と同じであるかどうかを確認し、停止します。それ以外の場合は続行します。 例 #include<iostream> using namespace std; i

  2. 指定された数値の桁を合計するC++プログラム

    これは、C++言語で桁の合計を計算する例です。 例 #include<iostream> using namespace std; int main() {    int x, s = 0;    cout << "Enter the number : ";    cin >> x;    while (x != 0) {       s = s + x % 10;       x = x / 10;