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

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


この問題では、sum(桁の合計を表す)とdigit(桁数を表す)の2つの値が与えられます。私たちの仕事は、与えられた桁数と桁数の合計で最小の数を見つけることです。

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

入力

sum = 15, dgiti = 2

出力

69

説明

合計が15の2桁の数字はすべて、69、78、87、96です。

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

この問題の簡単な解決策は、digitcountを持つすべての数値を桁と見なし、桁の合計が合計に等しい最小の数値を見つけることです。

効率的な解決策は、貪欲なアプローチを使用することです。最後の桁、つまり数値のLSBから要素を入力して数値を作成します。LSBの可能な最大の要素を検討してから、次の位置に移動します。

LSBをできるだけ大きくし、MSBをできるだけ小さくするようにします。

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

#include <iostream>
using namespace std;
void findSmallestNumWithSum(int digit, int sum) {
   if (sum == 0) {
      if(digit == 1)
         cout<<"Smallest number is 0";
      else
         cout<<"Smallest number with sum cannot be found";
      return ;
   }
   if (sum > 9*digit) {
      cout<<"Smallest number with sum cannot be found";
      return ;
   }
   int number[digit];
   sum -= 1;
   for (int i = digit-1; i>0; i--) {
      if (sum > 9) {
         number[i] = 9;
         sum -= 9;
      } else {
         number[i] = sum;
         sum = 0;
      }
   }
   number[0] = sum + 1;
   cout<<"Smallest number is ";
   for (int i=0; i<digit; i++)
      cout<<number[i];
}
int main() {
   int sum = 15, digit = 3;
   findSmallestNumWithSum(digit, sum);
   return 0;
}

出力

Smallest number is 159

  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;