Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm số dương thứ N có gốc số là X trong C ++

Trong bài toán này, chúng ta được cho hai giá trị nguyên N và X. Nhiệm vụ của chúng ta là tạo một chương trình Tìm số dương thứ N có gốc số là X.

Gốc kỹ thuật số (X) là một số dương có một chữ số được tìm thấy bằng cách thêm các chữ số của N thêm một cách đệ quy các chữ số, cho đến khi tổng trở thành một chữ số.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

N = 5, X = 4

Đầu ra

40

Phương pháp tiếp cận giải pháp

Một cách đơn giản để giải quyết vấn đề là đếm các số có gốc số là X. Đối với điều này, chúng ta sẽ bắt đầu từ 1 và sau đó kiểm tra xem gốc số của số hiện tại có bằng X hay không và đếm các số đó và trả về N số như vậy.

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#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;
}

Đầu ra

5th positive number whose digital root is 4 is 40

Cách tiếp cận hiệu quả

Một cách tiếp cận hiệu quả để giải quyết vấn đề là tìm N th số có gốc số bằng X sử dụng công thức trực tiếp là,

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

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#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;
}

Đầu ra

12th positive number whose digital root is 4 is 103