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

จัดเรียงตัวเลขใหม่ให้หารตัวเลขเดิมลงตัวใน C++

ภาพรวม

ได้รับจำนวนเต็ม number งานคือจัดเรียงหลักของตัวเลขใหม่ เพื่อให้ตัวเลขที่ได้จากการจัดเรียง หารตัวเลขเดิม number ลงตัว

ตัวอย่าง

อินพุต − int number = 100035

เอาต์พุต − Rearrangement of a number which is also divisible by it is: 300105

คำอธิบาย − ตัวเลข 100035 จัดเรียงหลักใหม่ได้ 300105 ซึ่งหาร 100035 ลงตัว

อินพุต − int number = 1000035

เอาต์พุต − Rearrangement of a number which is also divisible by it is: 3000105

คำอธิบาย − 1000035 จัดเรียงได้ 3000105 หาร 1000035 ลงตัว

อินพุต − int number = 28

เอาต์พุต − Rearrangement of a number which is also divisible by it is: -1

คำอธิบาย − 28 จัดเรียงได้ 82 ไม่หาร 28 ลงตัว คืน -1

แนวทางการแก้ปัญหา

  • รับ number ส่งให้ Rearrangement(number)
  • ภายในฟังก์ชัน:
    • สร้าง vector vec(10, 0) นับความถี่หลักของ number
    • เรียก total_count(number, vec) นับหลัก
    • วน i=2 ถึง 9 คำนวณ temp = number * i
    • สร้าง vec_2(10, 0) เรียก total_count(temp, vec_2)
    • หาก equal(vec.begin(), vec.end(), vec_2.begin()) คืน temp
    • มิฉะนั้นคืน -1
  • ฟังก์ชัน total_count(int number, vector &vec_3):
    • while number > 0: vec_3[number%10]++; number /= 10;

ตัวอย่างโค้ด C++

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

ผลลัพธ์

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