Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm số nhỏ nhất có số chữ số đã cho và tổng các chữ số trong C ++

Trong bài toán này, chúng ta được cho hai giá trị là tổng (biểu thị các chữ số sumof) và chữ số (biểu thị số chữ số). Nhiệm vụ của chúng ta là tìm số nhỏ nhất với một số chữ số nhất định và tổng các chữ số.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

sum = 15, dgiti = 2

Đầu ra

69

Giải thích

Tất cả các số có 2 chữ số có tổng 15 là:69, 78, 87, 96.

Phương pháp tiếp cận giải pháp

Một giải pháp đơn giản cho vấn đề là xem xét tất cả các số có số tiền là chữ số và tìm số nhỏ nhất có tổng chữ số bằng tổng.

Một giải pháp hiệu quả là sử dụng cách tiếp cận tham lam. Chúng tôi sẽ tạo số sau đó bằng cách điền vào các phần tử từ chữ số cuối cùng, tức là LSB của số. Chúng tôi sẽ xem xét phần tử lớn nhất có thể cho LSB và sau đó chuyển sang vị trí tiếp theo.

Chúng tôi sẽ cố gắng giữ LSB càng lớn càng tốt và MSB càng nhỏ càng tốt.

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#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;
}

Đầu ra

Smallest number is 159