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

C++でm+sum(m)+ sum(sum(m))=Nを満たす数の数


入力として数値Nが与えられます。目標は、次の条件を満たすNまでの数mを見つけることです。ここでN<=10 9

m + sum(m)+ sum(sum(m))=N。ここで、sum(m)はmの桁の合計です。

mが137の場合、sum(m)=1 + 3 + 7 =11およびsum(sum(m))=sum(11)=1 + 1 =2

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

入力- N =27

出力- m + sum(m)+ sum(sum(m))=Nを満たす数の数は次のとおりです。3

説明- 番号は次のとおりです。

9(9 + 9 + 9 =27)

15(15 +(1 + 5)+(6)=27)

21(21 +(2 + 1)+(3)=27)

入力- N =81

出力- m + sum(m)+ sum(sum(m))=Nを満たす数の数は次のとおりです。2

説明- 番号は次のとおりです。

63(63 +(6 + 3)+ 9 =81)

66(66 +(6 + 6)+(1 + 2)=81)

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

このアプローチでは、数値の桁の合計を計算し、追加された合計をNと比較します。計算された合計がNに等しい場合は、カウントをインクリメントします。結果として最後にリターンカウント。

最大数は10 9 である可能性があるため その場合、mの最大桁数は81(9 * 9)になり、sum(sum(m))の次の最大桁数は16(79の場合は7 + 9)になります。したがって、N-97より小さくNより大きい整数は指定された条件を満たさないため、N-97からNまでの数値をチェックします。

  • 整数Nを入力として使用します。
  • 関数total(int num)は数値の合計を取り、その桁の合計を返します。
  • res_totalを数字の合計とし、resを現在の余りとします。両方を0で初期化します。
  • whileループを使用して各単位桁をトラバースします。
  • 単位の桁をres=num%10とし、res_totalに追加します。
  • 次の桁のnumを10減らします。
  • 最後にnumの桁の合計としてres_totalを返します。
  • 関数condition(int N)はNを取り、m + sum(m)+ sum(sum(m))を満たす数値の数を返します。
  • 初期カウントを0とします。
  • i=N-97からi<=Nへのforループを使用してトラバースします。
  • 桁の合計をtemp_1=total(i)として計算します。
  • total(i)の桁の合計をtotal(temp_1)として計算します。
  • temp_3 =i + temp_1+temp_2を設定します。 Nに等しい場合は、カウントをインクリメントします。
  • 結果としてのforループリターンカウントの終了時。

#include <bits/stdc++.h>
using namespace std;
int total(int num) {
   int res_total = 0;
   int res = 0;
   while (num > 0) {
      res = num % 10;
      res_total = res_total + res;
      num = num / 10;
   }
   return res_total;
}
int condition(int N) {
   int count = 0;
   for (int i = N - 97; i <= N; i++) {
      int temp_1 = total(i);
      int temp_2 = total(temp_1);
      int temp_3 = i + temp_1 + temp_2;
      if (temp_3 == N) {
         count++;
      }
   }
   return count;
}
int main() {
   int N = 9999;
   cout << "Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: " << condition(N);
   return 0;
}

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

出力

Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: 2

  1. 自然数の合計を計算するC++プログラム

    自然数は1から始まる正の整数です。 自然数のシーケンスは-です 1, 2, 3, 4, 5, 6, 7, 8, 9, 10…… 最初のn個の自然数の合計は、forループまたは式を使用して計算できます。 これらの両方の方法を指定するプログラムは次のとおりです- forループを使用した自然数の合計。 forループを使用してn個の自然数の合計を計算するプログラムは次のとおりです。 例 #include<iostream> using namespace std; int main() {    int n=5, sum=0, i;

  2. 2つの数値を追加するC++プログラム

    加算は基本的な算術演算です。 2つの数値を加算するプログラムは、2つの数値の加算を実行し、それらの合計を画面に出力します。 2つの数字の加算を示すプログラムは次のとおりです- 例 #include <iostream> using namespace std; int main() {    int num1=15 ,num2=10, sum;    sum = num1 + num2;    cout<<"Sum of "<<num1<<" and &q