在C++中查詢數字根為X的第N個正數


在這個問題中,我們得到了兩個整數N和X。我們的任務是建立一個程式來查詢數字根為X的第N個正數。

**數字根(X)**是一個個位的正數,它是透過遞迴地將N的數字相加,直到和變成個位數而得到的。

讓我們來看一個例子來理解這個問題:

輸入

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

高效方法

解決這個問題的一個高效方法是使用直接公式找到數字根等於X的第N個數,公式為:

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

更新於:2021年3月13日

110 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.