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

หาตัวเลขที่น้อยที่สุดที่มีจำนวนหลักและผลรวมหลักที่กำหนดใน C++

ในปัญหานี้ เราได้รับค่าสองค่า คือ ผลรวม (แทนผลรวมของหลัก) และ digit (แทนจำนวนหลัก) งานของเราคือหาตัวเลขที่น้อยที่สุดที่มีจำนวนหลักและผลรวมหลักที่กำหนด

มาดูตัวอย่างเพื่อเข้าใจปัญหา

Input

sum = 15, digit = 2

Output

69

อธิบาย

ตัวเลข 2 หลักที่มีผลรวม 15 ได้แก่: 69, 78, 87, 96

วิธีแก้ปัญหา

วิธีแก้ที่ง่ายคือพิจารณาตัวเลขทั้งหมดที่มีจำนวนหลักเท่ากับ digit และหาตัวเลขที่น้อยที่สุดที่ผลรวมหลักเท่ากับ sum

วิธีที่มีประสิทธิภาพมากกว่าคือใช้ greedy approach เราจะสร้างตัวเลขโดยเติมจากหลักสุดท้าย (LSB) เราจะพิจารณาองค์ประกอบที่ใหญ่ที่สุดสำหรับ LSB แล้วค่อยไปยังตำแหน่งถัดไป

เราจะพยายามทำให้ LSB ใหญ่ที่สุดเท่าที่จะเป็นไปได้ และ MSB น้อยที่สุดเท่าที่จะเป็นไปได้

โปรแกรมแสดงการทำงานของวิธีแก้

ตัวอย่าง

#include <iostream> 
using namespace std; 

void findSmallestNumWithSum(int digit, int sum) { 
    if (sum == 0) { 
        if(digit == 1) 
            cout<<"Smallest number is 0"; 
        else 
            cout<<"Smallest number with sum cannot be found"; 
        return; 
    } 
    if (sum > 9*digit) { 
        cout<<"Smallest number with sum cannot be found"; 
        return; 
    } 
    int number[digit]; 
    sum -= 1; 
    for (int i = digit-1; i>0; i--) { 
        if (sum > 9) { 
            number[i] = 9; 
            sum -= 9; 
        } else { 
            number[i] = sum; 
            sum = 0; 
        } 
    } 
    number[0] = sum + 1; 
    cout<<"Smallest number is "; 
    for (int i=0; i<digit; i++) 
        cout<<number[i]; 
} 

int main() { 
    int sum = 15, digit = 3; 
    findSmallestNumWithSum(digit, sum); 
    return 0; 
}

ผลลัพธ์

Smallest number is 159