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

桁の合計がC++で指定された合計に等しいn桁の数値の数


桁数と合計として正の数が与えられます。目標は、入力の合計に等しい桁の合計を持つすべてのd桁の数値を見つけることです。先行ゼロのある数字は、d桁の数字とは見なされません。

範囲は1〜100の数字で、合計は1〜500です。

例を挙げて理解しましょう。

入力- 数字=3、digi_sum =3

出力- 桁の合計が指定された合計に等しいn桁の数字の数は次のとおりです。6

説明- 桁の合計が3である3桁の数字は次のとおりです。

102、111、120、201、210、および300。

入力- 数字=4digi_sum =2

出力- 桁の合計が指定された合計に等しいn桁の数字の数は次のとおりです。4

説明- 桁の合計が2である4桁の数字は次のとおりです:

1001、1010、1100、および2000。

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

このアプローチでは、最初のd桁の数字からトラバースし、数字の合計が指定された合計に等しい最初の数字を見つけます。次に、指定された合計よりも大きい桁の合計が見つかるまで、数値を9ずつ増やします。入力合計よりも大きい桁の合計を持つ数値が見つかったら、その数値を1ずつインクリメントし、合計を入力合計として次の数値を見つけます。最後のd桁の数字までこのプロセスを繰り返します。

  • 桁数と桁数の合計を入力として使用します。
  • 関数digits_sum(int Digits、int digi_sum)は両方の入力値を受け取り、桁の合計が指定された合計に等しいn桁の数値の数を返します。
  • 初期カウントを0とします。
  • 最初の数字をLeft=pow(10、digits-1)とします。そして、範囲の最後の数字はright =pow(10、digits)-1(つまり、digits =2の場合は10と99)です。
  • whileループを使用して左から右にトラバースします。
  • first=0およびlast=iを取得します。
  • 各i(最後)について、右端の数字(最後の%10)を取り、最初に追加します。次の反復のために最後を10減らします。
  • 最初にdigi_sumと等しくなった場合は、カウントをインクリメントし、次の反復のためにiを9ずつ更新します。
  • それ以外の場合は、iを1インクリメントします。
  • すべてのループの最後に、数字の合計がdigi_sumに等しい数値としてカウントされます。
  • 結果としてカウントを返します。

#include <bits/stdc++.h>
using namespace std;

int digits_sum(int digits, int digi_sum) {
   int count = 0;
   int Left = pow(10, digits - 1);
   int right = pow(10, digits) - 1;
   int i = Left;
   while (i <= right) {
      int first = 0;
      int last = i;
      while (last != 0) {
         first = first + last % 10;
         last = last / 10;
      }
      if (first == digi_sum) {
         count++;
         i = i + 9;
      } else {
         i++;
      }
   }
   return count;
}
int main() {
   int digits = 5;
   int digi_sum = 7;
   cout << "Count of n digit numbers whose sum of digits equals to given sum are: " << digits_sum(digits, digi_sum);
   return 0;
}

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

出力

Count of n digit numbers whose sum of digits equals to given sum are: 5

  1. 桁の合計がC++で指定された合計に等しいすべてのn桁の数値を出力します

    この問題では、2つの数値nとsumが与えられます。合計が合計に等しいn桁の数値をすべて印刷する必要があります。この問題では、先行ゼロが付いた数字は考慮されません。 問題を理解するために例を見てみましょう Input: n = 2 , sum = 5 Output: 14 23 32 41 50 Explanation: The sum of digits of the number in all numbers in 5. この問題を解決するには、指定された合計値を持つ合計を持つすべてのn桁の数値を見つける必要があります。このために、すべての値で桁の場所を固定し、その位置が偶数または奇数に

  2. 合計とGCDがC++で与えられている2つの数値を見つけます

    2つの数aとbの合計とgcdがあります。数字aとbの両方を見つける必要があります。それが不可能な場合は、-1を返します。合計が6でgcdが2であるとすると、数値は4と2になります。 このアプローチは、GCDが与えられると、その数がその倍数になることが知られているようなものです。次の手順があります 最初の数値をGCDとして選択すると、2番目の数値はsum − GCDになります。 前の手順で選択した数値の合計が合計と同じである場合は、両方の数値を出力します。 それ以外の場合は、数値が存在しないため、-1を出力します。 例 #include <iostream>