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

ความต่างสูงสุดจากการเปลี่ยนตัวเลขใน C++


สมมติว่าเรามีจำนวนเต็ม num ทำการดังนี้ 2 ครั้ง: เลือกตัวเลข x (0-9), เลือก y (0-9), แทนที่ x ทุกตัวใน num ด้วย y (ห้าม leading zero, ห้ามเป็น 0) ให้ a, b เป็นผลลัพธ์ครั้งที่ 1,2 หาความต่างสูงสุด |a-b|

ตัวอย่าง: 555 → ครั้งแรก 5→9 ได้ 999, ครั้งที่สอง 5→1 ได้ 111 ความต่าง = 888

วิธีแก้ปัญหา

  1. getMax: หาตัวเลขแรกจากซ้ายที่ไม่ใช่ 9 แทนที่ตัวนั้นทุกตัวเป็น 9
  2. getMin:
    • ถ้าตัวแรก ≠ 1: แทนที่ตัวแรกทุกตัวเป็น 1
    • ถ้าตัวแรก = 1: หาตัวแรกจากซ้ายที่ >1 แทนที่เป็น 0 (เริ่มจาก index 1)
  3. คืนค่า |getMax - getMin|

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

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

class Solution { 
public: 
    int getMax(int x){ 
        string s = to_string(x); 
        char a = '9'; 
        int i = 0; 
        while (i < s.size() && s[i] == '9') i++; 
        if (i < s.size()) a = s[i]; 
        for (int i = 0; i < s.size(); i++) 
            if (s[i] == a) s[i] = '9'; 
        return stoi(s); 
    } 
    
    int getMin(int x){ 
        string s = to_string(x); 
        char a; 
        if (s[0] != '1') { 
            a = s[0]; 
            for (int i = 0; i < s.size(); i++) 
                if (s[i] == a) s[i] = '1'; 
        } else { 
            if (s.size() == 1) return 1; 
            int i = 0; 
            a = '1'; 
            while (i < s.size() && s[i] <= '1') i++; 
            if (i < s.size()) a = s[i]; 
            for (int i = 1; i < s.size(); i++) 
                if (s[i] == a) s[i] = '0'; 
        } 
        return stoi(s); 
    } 
    
    int maxDiff(int num) { 
        int a = getMax(num); 
        int b = getMin(num); 
        return abs(a - b); 
    } 
}; 

int main(){ 
    Solution ob; 
    cout << (ob.maxDiff(666)); 
}

ข้อมูลนำเข้า

666

ผลลัพธ์

888