ในปัญหานี้ เราได้รับตัวเลขสองตัว n และ d หน้าที่ของเราคือค้นหาผลรวมของหลักขั้นต่ำที่เป็นไปได้หลังจากเพิ่มตัวเลข d
คำอธิบายปัญหา − เราจำเป็นต้องย่อผลรวมของตัวเลขโดยการเพิ่มตัวคูณ kth ของ d ถึง n
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
n = 5230, d = 54
ผลลัพธ์
1
คำอธิบาย
The number will be 5230 + (2*54) = 5338
แนวทางการแก้ปัญหา
วิธีง่ายๆ ในการแก้ปัญหาคือการตรวจสอบผลคูณของ d ทั้งหมดตั้งแต่ 1 ถึง 8 เนื่องจากในลำดับที่ 9 ผลรวมของหลักจะทำซ้ำ ขึ้นอยู่กับโมดูโล 9 ซึ่งจะส่งคืนผลรวมหลัก ดังนั้น a+d*(9k+l) โมดูโล 9 จึงเทียบเท่ากับโมดูโล a+d*l 9 ดังนั้น เราจะตรวจสอบการทวีคูณของ l*d ทั้งหมดตั้งแต่ 1 ถึง 8 และคืนค่าต่ำสุดที่พบ
ความก้าวหน้าอย่างหนึ่งในโปรแกรมสามารถทำได้โดยใช้ข้อเท็จจริงที่ว่าผลรวมหลักจะไม่น้อยกว่า 1 ดังนั้นหากเรามีผลรวมหลัก =1 เราจะคืนให้
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream> using namespace std; int calcDigitSum(int n) { int i = n % 9; if (i == 0) return 9; else return i; } int findMinDigitSum(int n, int d) { int minSum = 10; int number; for (int i = 1; i < 9; i++) { number = (n + i * d); minSum = min(minSum, calcDigitSum(number)); if(minSum == 1) return minSum; } return minSum; } int main() { int n = 5230, d = 54; cout<<"The minimum possible digitsum after adding the number is "<<findMinDigitSum(n, d); return 0; }
ผลลัพธ์
The minimum possible digitsum after adding the number is 1