Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में शब्दों के एक समूह को समान लंबाई की रेखाओं में परिवर्तित करके औचित्य सिद्ध करने का कार्यक्रम

मान लीजिए कि हमारे पास शब्दों की एक सूची है और एक चौड़ाई k है, हमें टेक्स्ट को इस तरह से व्यवस्थित करना है कि प्रत्येक पंक्ति में वर्णों की संख्या k हो और टेक्स्ट पूरी तरह से उचित हो। यहां हम अपने शब्दों को उतने ही शब्दों में पैक करेंगे जितने हम प्रत्येक पंक्ति में सम्मिलित कर सकते हैं। और जब आवश्यक हो तो हम अतिरिक्त रिक्त स्थान ' ' पैड करेंगे ताकि प्रत्येक पंक्ति में बिल्कुल k वर्ण हों।

यहां शब्दों के बीच अतिरिक्त रिक्त स्थान को यथासंभव समान रूप से वितरित किया जाना चाहिए। यदि एक पंक्ति पर रिक्त स्थान की संख्या शब्दों के बीच समान रूप से विभाजित नहीं होती है, तो बाईं ओर के खाली स्लॉट को दाईं ओर के स्लॉट की तुलना में अधिक स्थान दिए जाएंगे। पाठ की अंतिम पंक्ति के लिए, इसे उचित छोड़ दिया जाना चाहिए और शब्दों के बीच कोई अतिरिक्त स्थान नहीं डाला जाना चाहिए।

तो अगर इनपुट ["द", "ग्रम्पी", "विजार्ड्स", "मेक", "टॉक्सिक", "ब्रू", "फॉर", "द", "एविल", "क्वीन", "और" जैसा है , "जैक"], और के =13

तो आउटपुट होगा -

The grumpy
wizards make
toxic brew
for the evil
queen and
Jack

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • परिणाम नामक एक सरणी बनाएं
  • i के लिए 0 से a के आकार तक, i को j द्वारा अपडेट करें
    • चौड़ाई :=0
    • जे के लिए i से लेकर a के आकार और चौड़ाई + आकार a[j] + j - i <=b,
        के लिए
      • चौड़ाई:=चौड़ाई + आकार a[j]
    • स्पेस:=1, अतिरिक्त:=0
    • यदि j – 1 !=1 और j !=a का आकार, तो
      • स्पेस:=(बी-चौड़ाई)/जे-आई-1
      • अतिरिक्त:=(बी-चौड़ाई) मोड (जे-आई-1)
    • पंक्ति :=a[i]
    • k के लिए i + 1 से j की श्रेणी में
      • रिक्त-रिक्त स्थान की संख्या को पंक्ति के साथ संयोजित करें
      • अगर अतिरिक्त> 0, तो स्पेस को लाइन से जोड़ दें
      • अतिरिक्त 1 घटाएं
      • पंक्ति :=a[k] को लाइन से जोड़ना
    • x :=रेखा का आकार
    • पंक्ति:=लाइन के साथ रिक्त स्थान की संख्या (बी - एक्स) को संयोजित करें
    • परिणाम में लाइन डालें
  • रिटर्न रेस

उदाहरण (C++)

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
void print_vector(vector<vector<auto> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector<string> fullJustify(vector<string> &a, int b) {
      vector <string> result;
      int i, j;
      for(i = 0; i < a.size(); i = j){
         int width = 0;
         for(j = i; j < a.size() && width + a[j].size() + j - i <= b; j++){
            width += a[j].size();
         }
         int space = 1;
         int extra = 0;
         if(j - i != 1 && j != a.size()){
            space = (b - width) / (j - i - 1);
            extra = (b - width) % (j - i - 1);
         }
         string line(a[i]);
         for(int k = i + 1; k < j; k++){
            line += string(space, ' ');
            if(extra-- > 0){
               line += " ";
            }
            line += a[k];
         }
         int x = line.size();
         line += string(b - x, ' ');
         result.push_back(line);
      }
      return result;
   }
};
main(){
   vector<string> v = {"The", "grumpy", "wizards", "make", "toxic", "brew", "for", "the", "evil", "queen", "and", "Jack"};
   Solution ob;
   print_vector(ob.fullJustify(v, 13));
}

इनपुट

["I", "love", "coding.", "here", "we", "will", "write", "some", "program"]
16

आउटपुट

[The grumpy,
wizards make,
toxic brew,
for the evil,
queen and,
Jack ,]

  1. STL में Set_Union को लागू करने के लिए C++ प्रोग्राम

    दो समुच्चयों का मिलन उन तत्वों द्वारा निर्मित होता है जो किसी एक समुच्चय में या दोनों में मौजूद होते हैं। दूसरे सेट के तत्व जिनमें पहले सेट में समान तत्व होते हैं, उन्हें परिणामी सेट में कॉपी नहीं किया जाता है। सामान्य सेट ऑपरेशन हैं - संघ सेट करें चौराहे सेट करें सममित सेट अंतर या अनन्य-या अंतर य

  1. सी++ कार्यक्रम एसटीएल में Set_Intersection लागू करने के लिए

    दो समुच्चयों का प्रतिच्छेदन केवल उन तत्वों से बनता है जो दोनों समुच्चयों में उभयनिष्ठ हैं। फ़ंक्शन द्वारा कॉपी किए गए तत्व हमेशा पहले सेट से उसी क्रम में आते हैं। दोनों सेटों के तत्वों को पहले ही ऑर्डर कर दिया जाएगा। सामान्य सेट ऑपरेशन हैं - संघ सेट करें चौराहे सेट करें सममित सेट अंतर या अनन्य-या

  1. सी++ प्रोग्राम एसटीएल में Set_Difference को लागू करने के लिए

    दो समुच्चयों का अंतर केवल पहले सेट में मौजूद तत्वों से बनता है, दूसरे सेट में नहीं। फ़ंक्शन द्वारा कॉपी किए गए तत्व हमेशा पहले सेट से उसी क्रम में आते हैं। दोनों सेटों के तत्वों को पहले ही ऑर्डर कर दिया जाएगा। सामान्य सेट ऑपरेशन हैं - संघ सेट करें चौराहे सेट करें सममित सेट अंतर या अनन्य-या अंतर या