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

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


เราได้รับหมายเลขประเภทจำนวนเต็ม สมมุติว่า จำนวน ภารกิจคือการจัดเรียงตัวเลขใหม่ในลักษณะที่ตัวเลขที่เกิดขึ้นหลังจากการจัดเรียงใหม่นั้นหารด้วยตัวเลขที่ระบุเช่น 'number'

ให้เราดูสถานการณ์อินพุตเอาต์พุตที่หลากหลายสำหรับสิ่งนี้ -

ป้อนข้อมูล − จำนวนเต็ม =100035

ผลผลิต − การจัดเรียงใหม่ของจำนวนที่หารด้วยมันลงตัวคือ:300105

คำอธิบาย − เราได้รับตัวเลขจำนวนเต็มเป็น 'ตัวเลข' เช่น 100035 ตอนนี้ งานคือการจัดเรียงตัวเลขที่กำหนดเหล่านี้ใหม่ในลักษณะที่จำนวนที่เกิดขึ้นจะหารด้วย 100035 ลงตัว ดังนั้น หลังจากจัดเรียงตัวเลขใหม่ เราได้ 300105 ซึ่งหารด้วยตัวเลข 100035 ลงตัว

ป้อนข้อมูล − จำนวนเต็ม =1000035

ผลผลิต − การจัดเรียงตัวเลขใหม่ที่หารด้วยมันลงตัวคือ:3000105

คำอธิบาย − เราได้รับตัวเลขจำนวนเต็มเป็น 'ตัวเลข' เช่น 1000035 ตอนนี้ ภารกิจคือการจัดเรียงตัวเลขที่กำหนดเหล่านี้ใหม่ในลักษณะที่ตัวเลขที่เกิดขึ้นจะหารด้วย 1000035 ลงตัว ดังนั้นหลังจากจัดเรียงตัวเลขใหม่ เราได้ 3000105 ซึ่งหารลงตัว โดยหมายเลข 1000035

ป้อนข้อมูล − จำนวนเต็ม =28

ผลผลิต − การจัดเรียงตัวเลขใหม่ที่หารด้วยตัวมันลงตัวคือ:-1

คำอธิบาย − เราได้รับตัวเลขจำนวนเต็มเป็น 'ตัวเลข' เช่น 28 ตอนนี้ ภารกิจคือการจัดเรียงตัวเลขที่กำหนดเหล่านี้ใหม่ในลักษณะที่ตัวเลขที่เกิดขึ้นจะหารด้วย 28 ลงตัว ดังนั้นหลังจากจัดเรียงตัวเลขใหม่ เราได้ 82 ซึ่งไม่ใช่ หารด้วยจำนวน 28 ลงตัวจึงได้ผลลัพธ์เป็น -1

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ป้อนตัวแปรประเภทจำนวนเต็ม สมมุติว่า number และส่งข้อมูลไปยังฟังก์ชัน Rearrangement(number )

  • ภายในฟังก์ชัน การจัดเรียงใหม่(ตัวเลข)

    • สร้างตัวแปรประเภทเวกเตอร์ซึ่งเก็บตัวแปรประเภทจำนวนเต็ม สมมติว่า vec(10, 0)

    • เรียกใช้ฟังก์ชัน total_count(number, vec) และ pass number และ vec เป็นพารามิเตอร์ของฟังก์ชัน

    • เริ่มลูป FOR จาก i ถึง 2 จนถึง i น้อยกว่า 10 ภายในลูป ตั้งค่า temp เป็นตัวเลข * i.

    • สร้างตัวแปรประเภทเวกเตอร์ซึ่งจัดเก็บตัวแปรประเภทจำนวนเต็ม สมมติว่า vec_2(10, 0)

    • เรียกใช้ฟังก์ชัน total_count(number, vec_2) และ pass number และ vec_2 เป็นพารามิเตอร์ของฟังก์ชัน

    • ตรวจสอบ IF equal(vec.begin(), vec.end(), vec_2.begin()) จากนั้นคืนค่า temp ELSE ส่งคืน -1

  • ภายในฟังก์ชัน total_count(int number, vector &vec_3)

    • เริ่มวนซ้ำ ขณะที่ตัวเลขคือ 1 ภายในลูป ตั้งค่า vec_3 เป็น vec_3[number % 10]++ และตัวเลขเป็นตัวเลข / 10

ตัวอย่าง

#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