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

การแบ่งส่วนที่เหมาะสมที่สุดใน C++


สมมติว่าเรามีรายการจำนวนเต็มบวก จำนวนเต็มที่อยู่ติดกันจะทำการหารแบบทศนิยม ตัวอย่างเช่น [2,3,4] -> 2 / 3 / 4 ตอนนี้ เราสามารถเพิ่มวงเล็บในตำแหน่งใดก็ได้เพื่อเปลี่ยนลำดับความสำคัญของการดำเนินการเหล่านี้ เราควรหาวิธีเพิ่มวงเล็บเพื่อให้ได้ผลลัพธ์สูงสุด เราต้องหานิพจน์ที่เกี่ยวข้องในรูปแบบสตริง นิพจน์ของเราไม่ควรมีวงเล็บซ้ำซ้อน ดังนั้นหากอินพุตเป็น [1000,100,10,2] ผลลัพธ์จะเป็น “1000/(100/10/2)”

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

  • n :=ขนาดของอาร์เรย์ nums
  • ถ้า n เป็น 0 ให้คืนค่าสตริงว่าง
  • num :=nums[0] เป็นสตริง
  • ถ้า n เป็น 1 ให้คืนค่า num
  • ถ้า n เป็น 2 ให้คืนค่า num concatenate /, concatenate nums[1] เป็นสตริง
  • den :=สตริงว่าง
  • สำหรับ i ในช่วง 1 ถึง n – 1
    • den :=den + nums[i] เป็นสตริง
    • ถ้าฉันไม่ใช่ n – 1 แล้ว den :=den concatenate ‘/’
  • ส่งคืน num concatenate / concatenate ( concatenate den , concatenate )

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

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string optimalDivision(vector<int>& nums) {
      int n = nums.size();
      if(n == 0) return "";
      string num = to_string(nums[0]);
      if(n == 1) return num;
      if(n == 2) return num + "/" + to_string(nums[1]);
      string den = "";
      for(int i = 1; i < n; i++){
         den += to_string(nums[i]);
         if(i != n - 1) den += "/";
      }
      return num + "/" + "(" + den + ")";
   }
};
main(){
   vector<int> v = {1000,100,10,2};
   Solution ob;
   cout << (ob.optimalDivision(v));
}

อินพุต

[1000,100,10,2]

ผลลัพธ์

1000/(100/10/2)