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

Sắp xếp lại một số cũng chia hết cho nó trong C ++

Chúng tôi được cung cấp một số kiểu số nguyên, giả sử, số. Nhiệm vụ là sắp xếp lại các chữ số của số theo cách sao cho một số được tạo thành sau khi sắp xếp lại cũng chia hết cho số đã cho, tức là 'số'.

Hãy để chúng tôi xem các kịch bản đầu ra đầu vào khác nhau cho việc này -

Đầu vào - số int =100035

Đầu ra - Sắp xếp lại của một số cũng chia hết cho nó là:300105

Giải thích - chúng ta được cung cấp một số nguyên là 'number', tức là 100035. Bây giờ, nhiệm vụ là sắp xếp lại các chữ số đã cho này theo cách sao cho số được tạo thành sẽ chia hết cho 100035. Vì vậy, sau khi sắp xếp lại các chữ số, chúng ta có 300105 chia hết cho số 100035.

Đầu vào - số int =1000035

Đầu ra - Sắp xếp lại của một số cũng chia hết cho nó là:3000105

Giải thích - chúng ta được cung cấp một số nguyên là 'số', tức là 1000035. Bây giờ, nhiệm vụ là sắp xếp lại các chữ số đã cho này theo cách sao cho số được tạo thành sẽ chia hết cho 1000035. Vì vậy, sau khi sắp xếp lại các chữ số, chúng ta có 3000105 là số chia hết bởi con số 1000035.

Đầu vào - số int =28

Đầu ra - Sắp xếp lại của một số cũng chia hết cho nó là:-1

Giải thích - chúng ta được cho một số nguyên là 'số' tức là 28. Bây giờ, nhiệm vụ là sắp xếp lại các chữ số đã cho này theo cách sao cho số được tạo thành sẽ chia hết cho 28. Vì vậy, sau khi sắp xếp lại các chữ số, chúng ta nhận được 82 mà không phải chia hết cho số 28 do đó kết quả là -1.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập một biến kiểu số nguyên, giả sử là số và Truyền dữ liệu vào hàm Sắp xếp lại (số).

  • Bên trong chức năng Sắp xếp lại (số)

    • Tạo một biến kiểu vectơ đang lưu trữ các biến kiểu số nguyên, giả sử, vec (10, 0).

    • Gọi hàm total_count (số, vec) và truyền số và vec làm tham số cho hàm.

    • Bắt đầu vòng lặp FOR từ i đến 2 cho đến khi tôi nhỏ hơn 10. Trong vòng lặp, đặt nhiệt độ thành số * i.

    • Tạo một biến kiểu vectơ đang lưu trữ các biến kiểu số nguyên, giả sử, vec_2 (10, 0).

    • Gọi hàm total_count (số, vec_2) và chuyển số và vec_2 làm tham số cho hàm.

    • Kiểm tra IF bằng (vec.begin (), vec.end (), vec_2.begin ()) sau đó trả về tạm thời. ELSE, trả về -1.

  • Bên trong hàm total_count (int number, vector &vec_3)

    • Bắt đầu vòng lặp WHILE số là 1. Bên trong vòng lặp, đặt vec_3 là vec_3 [số% 10] ++ và số thành số / 10.

Ví dụ

#include<bits/stdc++.h>
using namespace std;
void total_count(int number, vector<int> &vec_3){
   while(number){
      vec_3[number % 10]++;
      number = number / 10;
   }
}
int Rearrangement(int number){
   vector<int> vec(10, 0);
   total_count(number, vec);
   for(int i = 2; i < 10; i++){
      int temp = number * i;
      vector<int> vec_2(10, 0);
      total_count(temp, vec_2);
      if(equal(vec.begin(), vec.end(), vec_2.begin())){
         return temp;
      }
   }
   return -1;
}
int main(){
   int number = 100035;
   cout<<"Rearrangement of a number which is also divisible by it is: "<<Rearrangement(number);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau

Rearrangement of a number which is also divisible by it is: 300105