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

จำนวนหลักที่ต้องลบเพื่อให้เลขหาร 3 ลงตัวใน C++

โจทย์

คุณได้รับตัวเลขในรูปแบบสตริง คุณต้องหาว่าต้องลบหลักกี่หลักเพื่อให้มันหาร 3 ลงตัว

เราสามารถทำให้เลขหาร 3 ลงตัวได้โดยการลบได้สูงสุด 2 หลัก ดังนั้นจำนวนหลักสูงสุดที่ต้องลบคือ 2

มาดูตัวอย่างกัน

อินพุต

92

เอาต์พุต

1

เราสามารถลบ 2 เพื่อให้ได้ 9 ซึ่งหาร 3 ลงตัว

อินพุต

999

เอาต์พุต

0

เลขที่กำหนดให้มาหาร 3 ลงตัวอยู่แล้ว

อัลกอริธึม

  • กำหนดตัวเลขในรูปสตริง
  • หาผลรวมของหลักต่างๆ
  • ถ้าผลรวมหาร 3 ลงตัว ให้คืนค่า 0
  • ถ้าผลรวมไม่หาร 3 ลงตัวและความยาวของเลขเป็น 1 เราไม่สามารถทำให้หาร 3 ลงตัวได้ คืนค่า -1
  • วนลูปตรวจสอบแต่ละหลัก
    • ลบหลักนั้นออกและตรวจสอบการหารลงตัว
    • ถ้าเงื่อนไขเป็นจริง ให้คืนค่า 1
  • ตรวจสอบความยาวอีกครั้ง ถ้าความยาวเป็น 2 ให้คืนค่า -1
  • มิฉะนั้นคืนค่า 2

การนำไปใช้งาน

ต่อไปนี้เป็นการนำไปใช้งานของอัลกอริธึมข้างต้นใน C++

#include <bits/stdc++.h> 
using namespace std; 

int getNumSum(string n) { 
    int len = n.length(), sum = 0; 
    for (int i = 0; i < len; i++) { 
        sum += (int)n[i]; 
    } 
    return sum; 
} 

int getDigitsCount(string num) { 
    int n = num.length(); 
    int sum = getNumSum(num); 
    if (sum % 3 == 0) { 
        return 0; 
    } 
    if (n == 1) { 
        return -1; 
    } 
    for (int i = 0; i < n; i++) { 
        int currentDigit = num[i] - '0'; 
        if (sum % 3 == currentDigit % 3) { 
            return 1; 
        } 
    } 
    if (n == 2) { 
        return -1; 
    } 
    return 2; 
} 

int main() { 
    string num = "7536836"; 
    cout << getDigitsCount(num) << endl; 
    return 0; 
}

ผลลัพธ์

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

1