ในปัญหานี้ เราได้รับค่าจำนวนเต็มสองค่า 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