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

นับจำนวนตัวเลข n หลักที่ผลรวมหลักเท่ากับค่าที่กำหนดใน C++

กำหนดจำนวนบวกเป็นจำนวนหลักและผลรวม เป้าหมายคือหาตัวเลข d หลักทั้งหมดที่มีผลรวมของหลักเท่ากับผลรวมอินพุต ตัวเลขที่มี leading zeros จะไม่ถูกพิจารณาว่าเป็นตัวเลข d หลัก

ช่วงคือ หลักระหว่าง 1 ถึง 100 และผลรวมระหว่าง 1 ถึง 500

ทำความเข้าใจด้วยตัวอย่าง

ตัวอย่าง

Input - digits = 3, digi_sum = 3

Output - จำนวนตัวเลข n หลักที่ผลรวมหลักเท่ากับค่าที่กำหนดคือ: 6

คำอธิบาย - ตัวเลข 3 หลักที่มีผลรวมหลักเป็น 3 คือ:

102, 111, 120, 201, 210, และ 300

Input - digits = 4, digi_sum = 2

Output - จำนวนตัวเลข n หลักที่ผลรวมหลักเท่ากับค่าที่กำหนดคือ: 4

คำอธิบาย - ตัวเลข 4 หลักที่มีผลรวมหลักเป็น 2 คือ:

1001, 1010, 1100, และ 2000

แนวทางที่ใช้ในโปรแกรมด้านล่าง

ในแนวทางนี้ เราจะเดินทางจากตัวเลข d หลักแรกและหาตัวเลขแรกที่ผลรวมของหลักเท่ากับผลรวมที่กำหนด จากนั้นเพิ่มตัวเลขทีละ 9 จนกว่าจะพบผลรวมของหลักมากกว่าผลรวมที่กำหนด เมื่อพบตัวเลขที่มีผลรวมหลักมากกว่าผลรวมอินพุต ให้เพิ่มตัวเลขทีละ 1 และหาตัวเลขถัดไปที่มีผลรวมเท่ากับผลรวมอินพุต ทำซ้ำกระบวนการนี้จนถึงตัวเลข d หลักสุดท้าย

  • รับจำนวนหลักและผลรวมของหลักเป็นอินพุต
  • ฟังก์ชัน digits_sum(int digits, int digi_sum) รับค่าอินพุตทั้งสองและคืนค่าจำนวนตัวเลข n หลักที่ผลรวมหลักเท่ากับผลรวมที่กำหนด
  • ตั้งค่า count เริ่มต้นเป็น 0
  • รับตัวเลขแรกเป็น Left = pow(10, digits - 1) และตัวเลขสุดท้ายของช่วงเป็น right = pow(10, digits) - 1 (เช่น 10 และ 99 สำหรับ digits = 2)
  • ใช้ while loop เดินทางจาก left ถึง right
  • รับ first = 0 และ last = i
  • สำหรับแต่ละ i (last) รับหลักขวาสุด (last % 10) บวกเข้า first ลด last ลง 10 สำหรับรอบถัดไป
  • ถ้า first เท่ากับ digi_sum เพิ่ม count และอัปเดต i เพิ่ม 9 สำหรับรอบถัดไป
  • มิฉะนั้นเพิ่ม i ขึ้น 1
  • ในท้ายที่สุดของลูปทั้งหมด เราจะได้ count เป็นตัวเลขที่มีผลรวมหลักเท่ากับ digi_sum
  • คืนค่า count เป็นผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h> 
using namespace std; 

int digits_sum(int digits, int digi_sum) { 
    int count = 0; 
    int Left = pow(10, digits - 1); 
    int right = pow(10, digits) - 1; 
    int i = Left; 
    while (i <= right) { 
        int first = 0; 
        int last = i; 
        while (last != 0) { 
            first = first + last % 10; 
            last = last / 10; 
        } 
        if (first == digi_sum) { 
            count++; 
            i = i + 9; 
        } else { 
            i++; 
        } 
    } 
    return count; 
} 

int main() { 
    int digits = 5; 
    int digi_sum = 7; 
    cout << "Count of n digit numbers whose sum of digits equals to given sum are: " << digits_sum(digits, digi_sum); 
    return 0; 
}

หากเรารันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้

ผลลัพธ์

Count of n digit numbers whose sum of digits equals to given sum are: 5