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

ความแตกต่างสูงสุดที่คุณจะได้รับจากการเปลี่ยนจำนวนเต็มใน C++


สมมุติว่าเรามีเลขจำนวนเต็ม เราจะใช้ขั้นตอนต่อไปนี้สองครั้งพอดีขั้นตอนคือ -

  • เลือกตัวเลข x ในช่วง 0 ถึง 9

  • เลือกตัวเลข y อื่นในช่วง 0 ถึง 9 ด้วย ตัวเลข y สามารถเท่ากับ x ได้

  • แทนที่การเกิดขึ้นทั้งหมดของ x ในการแทนค่าทศนิยมของ num ด้วย y จำนวนเต็มใหม่ต้องไม่มีศูนย์นำหน้า และจำนวนเต็มใหม่ไม่สามารถมีค่าเป็น 0

ตอนนี้ให้พิจารณา a และ b เป็นผลลัพธ์ของการนำการดำเนินการไปใช้กับ num ในครั้งแรกและครั้งที่สองตามลำดับ จากนั้นหาค่าความแตกต่างสูงสุดระหว่าง a และ b

ดังนั้น หากอินพุตเป็น 555 ผลลัพธ์จะเป็น 888 เป็นครั้งแรกที่การเลือก x =5 และ y =9 และเก็บจำนวนเต็มใหม่ใน a ครั้งที่สอง เลือก x =5 และ y =1 และเก็บจำนวนเต็มใหม่ใน b

ตอนนี้เรามี a =999 และ b =111 และความแตกต่างสูงสุดคือ =999 - 111 =888

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน getMax() ซึ่งจะใช้เวลา x

  • s :=แปลง x เป็นสตริง

  • a :='9'

  • ผม :=0

  • ในขณะที่ (i <ขนาดของ s และ s[i] เท่ากับ '9') ทำ -

    • (เพิ่ม i ขึ้น 1)

  • ถ้าฉัน <ขนาดของ s แล้ว −

    • a :=s[i]

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • ถ้า s[i] เหมือนกับ a แล้ว −

      • s[i] :='9'

  • ส่งคืน s เป็นตัวเลข

  • กำหนดฟังก์ชัน getMin() ซึ่งจะใช้เวลา x

  • s :=แปลง x เป็นสตริง

  • ถ้า s[0] ไม่เท่ากับ '1' ดังนั้น −

    • a :=s[0]

    • สำหรับการเริ่มต้น i :=0 เมื่อ i

      • ถ้า s[i] เหมือนกับ a แล้ว −

        • s[i] :='1'

  • มิฉะนั้น

    • ถ้าขนาดของ s เท่ากับ 1 แล้ว −

      • กลับ 1

    • ผม :=0

    • a :='1'

    • ในขณะที่ (i <ขนาดของ s และ s[i] <='1'), ทำ −

      • (เพิ่ม i ขึ้น 1)

    • ถ้าฉัน <ขนาดของ s แล้ว −

      • a :=s[i]

    • สำหรับการเริ่มต้น i :=1 เมื่อฉัน

      • ถ้า s[i] เหมือนกับ a แล้ว −

        • s[i] :='0'

  • ส่งคืน s เป็นตัวเลข

  • จากวิธีหลัก ให้ทำดังต่อไปนี้ −

  • a :=getMax(num)

  • b :=getMin(num)

  • กลับ |a - b|

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int getMax(int x){
      string s = to_string(x);
      char a = '9', b;
      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);
   }
};
main(){
   Solution ob;
   cout << (ob.maxDiff(666));
}

อินพุต

666

ผลลัพธ์

888