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

ค่าเซ็กเมนต์สูงสุดหลังจากใส่ k เบรกพอยต์เป็นตัวเลขใน C++


ในปัญหานี้ เราได้รับสตริงที่แสดงถึงจำนวนมาก และเสียงคำรามจำนวนเต็ม k แสดงถึงจำนวนของเบรกพอยต์ งานของเราคือสร้างโปรแกรมที่จะหาค่าเซกเมนต์สูงสุดหลังจากใส่จุดสั่ง L เป็นตัวเลข

ที่นี่ เราต้องหาจำนวนสูงสุดที่สามารถสร้างได้หลังจากใส่ k เบรกพอยต์ในจำนวนที่กำหนดโดยสตริง

ลองมาดูตัวอย่างเพื่อทำความเข้าใจปัญหา

ป้อนข้อมูล − สตริง =“45972”, k =3

ผลผลิต − 97

คำอธิบาย

All possible number is:
45    9    7    2
4    59    7    2
4    5    97    2
4    5    9    72
From all 97 is the largest number.

เพื่อแก้ปัญหานี้ เราจะใช้หน้าต่างบานเลื่อน ที่นี่ขนาดหน้าต่างจะเท่ากับ (ความยาวของสตริง - k) นั่นคือจำนวนสูงสุดของขนาดนี้ เราจะตรวจสอบจำนวนสูงสุดจากจำนวนที่เป็นไปได้ทั้งหมดของขนาดที่กำหนดโดยใช้เทคนิคหน้าต่างบานเลื่อน

ตัวอย่าง

โปรแกรมเพื่อค้นหาค่าเซ็กเมนต์สูงสุดหลังจากใส่จุดเบรก K เป็นตัวเลข -

#include <bits/stdc++.h>
using namespace std;
int findMaxSegmentWithKbreaks(string &s, int k) {
   int window = s.length() - k;
   int MaxNumber = 0;
   for (int i=0; i<window; i++)
   MaxNumber = MaxNumber * 10 + (s[i] - '0');
   int slWindow = pow(10, window-1);
   int value = MaxNumber;
   for (int i = 1; i <= (s.length() - window); i++) {
      value = value - (s[i-1]- '0')*slWindow;
      value = value*10 + (s[i+window-1]- '0');
      MaxNumber = max(MaxNumber, value);
   }
   return MaxNumber;
}
int main() {
   string s = "45972";
   int k = 3;
   cout<<"Maximum segment value after putting "<<k<<" break points in a number = "<<findMaxSegmentWithKbreaks(s, k);
   return 0;
}

ผลลัพธ์

Maximum segment value after putting 3 breakpoints in a number = 97