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

ตัวเลขมากที่สุดจาก N หลักที่กำหนดซึ่งหาร 2, 3 และ 5 ลงตัวใน C++

โจทย์

ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมหาตัวเลขมากที่สุดที่สร้างจากอาร์เรย์ซึ่งหาร 2, 3, และ 5 ลงตัว

มาดูขั้นตอนการแก้ปัญหา

  • กำหนดอาร์เรย์
  • ตัวเลขต้องลงท้ายด้วย 0 และผลรวมของตัวเลขทั้งหมดต้องหาร 3 ลงตัว เพื่อให้หาร 2, 3, และ 5 ลงตัว
  • ตรวจสอบ 0 ในอาร์เรย์และพิมพ์ not possible หากไม่มีในอาร์เรย์
  • เรียงลำดับอาร์เรย์ในลำดับมากไปน้อย
  • หาเศษของ sum % 3
  • ถ้าเศษไม่ใช่ 1 ให้ลบหลักทั้งหมดจากท้ายที่เศษของ digit % 3 เท่ากับเศษข้างต้น
  • ถ้าไม่มีหลักที่มีเศษเท่ากับข้างต้น ให้ลบ 3 ออกจากเศษข้างต้นและลบหลักท้าย 2 หลักที่เศษเท่ากับข้างต้น
  • พิมพ์หลักทั้งหมดจากอาร์เรย์

ตัวอย่าง

มาดูโค้ดกัน

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

ผลลัพธ์

หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้

765544320

สรุป

หากคุณมีคำถามในบทช่วยสอนนี้ ให้กล่าวถึงในส่วนความคิดเห็น