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

C ++で数値dを加算した後、可能な最小の桁の合計を求めます


この問題では、2つの数nとdが与えられます。私たちのタスクは、数値dを加算した後、可能な最小の桁の合計を見つけることです。

問題の説明 − dのk番目の倍数をnに加算して、桁の合計を最小化する必要があります。

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

入力

n = 5230, d = 54

出力

1

説明

The number will be 5230 + (2*54) = 5338

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

この問題を解決する簡単な方法は、1から8までのdのすべての倍数をチェックすることです。これは、9番目の倍数で桁の合計が繰り返されるためです。これはモジュロ9に基づいており、数字の合計を返します。したがって、9を法とするa + d *(9k + l)は、9を法とするa + d * lと同等です。したがって、1から8までのl * dのすべての倍数をチェックし、見つかった最小値を返します。

プログラムの1つの進歩は、桁の合計が1未満になることはないという事実を使用して行うことができるため、桁の合計=1の場合は、それを返します。

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

#include <iostream>
using namespace std;
int calcDigitSum(int n) {
   int i = n % 9;
   if (i == 0)
      return 9;
   else
      return i;
}
int findMinDigitSum(int n, int d) {
   int minSum = 10;
   int number;
   for (int i = 1; i < 9; i++) {
      number = (n + i * d);
      minSum = min(minSum, calcDigitSum(number));
      if(minSum == 1)
         return minSum;
   }
   return minSum;
}
int main() {
   int n = 5230, d = 54;
   cout<<"The minimum possible digitsum after adding the number is "<<findMinDigitSum(n, d);
   return 0;
}

出力

The minimum possible digitsum after adding the number is 1

  1. C++を使用してNを合計として表現するために必要なパリンドロームの最小数。

    問題の説明 数Nが与えられた場合、Nをそれらの合計として表現するために必要な回文数の最小数を見つける必要があります N =15の場合、2つの回文、つまり8と7が必要です。 アルゴリズム 1. Generate all the palindromes up to N in a sorted fashion 2. Find the size of the smallest subset such that its sum is N 例 #include <iostream> #include <vector> #include <climits> #incl

  2. C ++を使用して、数の因数の最小合計を求めます。

    ここでは、与えられた数の因子の最小合計を取得する方法を見ていきます。数が12であると仮定します。これはさまざまな方法で因数分解できます- 12 =12 * 1(12 + 1 =13) 12 =2 * 6(2 + 6 =8) 12 =3 * 4(3 + 4 =7) 12 =2 * 2 * 3(2 + 2 + 3 =7) 最小の合計は7です。数値を取り、最小の因子の合計を見つけようとします。最小の因数分解の合計を取得するには、可能な限り数を因数分解する必要があります。言い換えれば、素因数を足して合計Sを求めようとすると、その合計は最小化されると言えます。 例 #include<