Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาจำนวนบวกที่ N ที่มีรูทดิจิทัลเป็น X ใน C++


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