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

Số lớn nhất có tập N chữ số đã cho chia hết cho 2, 3 và 5 trong C ++

Trong hướng dẫn này, chúng ta sẽ viết một chương trình tìm số lớn nhất được hình thành từ mảng chia hết cho 2, 3 và 5.

Hãy xem các bước để giải quyết vấn đề.

  • Khởi tạo mảng.
  • Số phải kết thúc bằng 0 và tổng của tất cả các số phải chia hết cho 3 để chia hết cho 2, 3 và 5.
  • Kiểm tra số 0 trong mảng và không thể in nếu nó không có trong mảng.
  • Sắp xếp mảng theo thứ tự giảm dần.
  • Tìm phần còn lại cho tổng% 3.
  • Nếu phần dư không phải là 1, thì xóa tất cả các chữ số ở cuối mà phần còn lại của chữ số% 3 bằng phần còn lại ở trên.
  • Nếu không có chữ số nào có phần dư giống như trên thì lấy phần dư trên trừ đi 3 và xóa hai chữ số cuối cùng có phần dư giống như trên.
  • In tất cả các chữ số từ mảng.

Ví dụ

Hãy xem mã.

#include <bits/stdc++.h>
using namespace std;
void findLargestDivibleNumber(int n, vector<int>& v){
   int flag = 0;
   long long sum = 0;
   for (int i = 0; i < n; i++) {
      if (v[i] == 0) {
         flag = 1;
      }
      sum += v[i];
   }
   if (!flag) {
      cout << "Not possible" << endl;
   }else {
      sort(v.begin(), v.end(), greater<int>());
      if (v[0] == 0) {
         cout << "0" << endl;
      }else {
         int flag = 0;
         int remainder = sum % 3;
         if (remainder != 0) {
            for (int i = n - 1; i >= 0; i--) {
               if (v[i] % 3 == remainder) {
                  v.erase(v.begin() + i);
                  flag = 1;
                  break;
               }
            }
            if (flag == 0) {
               remainder = 3 - remainder;
               int count = 0;
               for (int i = n - 1; i >= 0; i--) {
                  if (v[i] % 3 == remainder) {
                     v.erase(v.begin() + i);
                     count++;
                     if (count >= 2) {
                        break;
                     }
                  }
               }
            }
         }
         if (*v.begin() == 0) {
            cout << "0" << endl;
         }else {
            for (int i : v) {
               cout << i;
            }
         }
      }
   }
}
int main() {
   int n = 9;
   vector<int> v{ 4, 5, 0, 3, 2, 4, 5, 6, 7 };
   findLargestDivibleNumber(n, v);
   return 0;
}

Đầu ra

Nếu bạn chạy đoạn mã trên, thì bạn sẽ nhận được kết quả sau.

765544320

Kết luận

Nếu bạn có bất kỳ câu hỏi nào trong hướng dẫn, hãy đề cập đến chúng trong phần bình luận.