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

C++で数字根がXであるN番目の正の数を見つけます


この問題では、2つの整数値NとXが与えられます。私たちのタスクは、数字根がXであるN番目の正の数を見つけるプログラムを作成することです。

数字根(X) は、合計が1桁になるまで、Nの桁を再帰的に加算することによって求められる1桁の正の数です。

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

入力

N = 5, X = 4

出力

40

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

この問題を解決する簡単な方法は、数字根がXである数を数えることです。このため、1から始めて、現在の数字の数字根がXに等しいかどうかを確認し、数を数えてN番目の数を返します。

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

#include <iostream>
using namespace std;
int calcDigitalRoot(int num) {
   int digitSum = 1000, number = num;
   while (digitSum >= 10) {
      digitSum = 0;
      while (number > 0) {
         digitSum += number % 10;
         number /= 10;
      }
      number = digitSum;
   }
   return digitSum;
}
int calcNthDigitalRoot(int X, int N) {
   int countDigitalRootVals = 0;
   for (int i = 1; countDigitalRootVals < N; ++i) {
      int digitalRoot = calcDigitalRoot(i);
      if (digitalRoot == X) {
         ++countDigitalRootVals;
      }
      if (countDigitalRootVals == N)
         return i;
   }
   return -1;
}
int main(){
   int X = 4, N = 5;
   cout<<N<<"th positive number whose digital root is "<<X<<" is "<<calcNthDigitalRoot(X, N);
   return 0;
}

出力

5th positive number whose digital root is 4 is 40

効率的なアプローチ

問題を解決するための効率的なアプローチは、N th を見つけることです。 数字根がXに等しい数で、直接式を使用します。

Nth number = (N + 1)*9 + X

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

#include <iostream>
using namespace std;
int calcNthDigitalRoot(int X, int N) {
   int nthNumber = (((N - 1) * 9) + X);
   return nthNumber;
}
int main() {
   int X = 4, N = 12;
   cout<<N<<"th positive number whose digital root is "<<X<<" is "<<calcNthDigitalRoot(X, N);
   return 0;
}

出力

12th positive number whose digital root is 4 is 103

  1. C++で数値の立方根を見つける

    ここでは、数値の立方根を取得する方法を説明します。数値が27とすると、この数値の立方根は3になります。この問題を解決するために、ライブラリ関数を使用せずに独自のロジックを定義します。二分探索アプローチを使用します。この問題を解決するには、次の手順に従う必要があります。 threshold =0.000001のようなしきい値があるとします。 左の値を0として開始し、右の値を数値として開始します 中央を計算する:=(左+右)/ 2 (number – mid3)の絶対値がしきい値よりも小さい場合は、回答としてmidを返します mid3が数値より大きい場合は、右に設定しま

  2. C++で有理数のLCMを見つける

    ここでは、有理数のLCMを見つける方法を説明します。有理数のリストがあります。リストが{2/7、3 / 14、5 / 3}のようであるとすると、LCMは30/1になります。 この問題を解決するには、すべての分子のLCMを計算し、次にすべての分母のgcdを計算し、次に有理数のLCMを計算する必要があります- $$ LCM =\ frac {LCM \:of \:all \:𝑛𝑢𝑚𝑒𝑟𝑎𝑡𝑜𝑟𝑠} {GCD \:of \:all \:𝑑𝑒𝑛𝑜𝑚𝑖𝑖 例 #include <iostream> #include <vector> #inc