ในปัญหานี้ เราได้รับค่าจำนวนเต็มสองค่า N และ X งานของเราคือสร้างโปรแกรมเพื่อค้นหาจำนวนบวกที่ N ซึ่งรากดิจิทัลเป็น X
รากดิจิทัล (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
แนวทางที่มีประสิทธิภาพ
วิธีที่มีประสิทธิภาพในการแก้ปัญหาคือการหา 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