2015-11-30 2 views
5

में रिकर्सन का उपयोग कर पाठ पिरामिड मैं किसी भी पाठ इनपुट के साथ एक पूर्ण त्रिकोण बनाने की कोशिश कर रहा हूं। उदाहरण अगर मैं स्ट्रिंग है कि "abcdefghij" मैं चाहता हूँ होने के लिए परिणामजावा

aj 
    abij 
    abchij 
abcdghij 
abcdefghij 

यदि स्ट्रिंग लंबाई "abcdefghij" में विषम होता है तो उत्पादन होगा

a 
    abi 
    abchi 
abcdghi 
abcdefghi 

यहाँ क्या है मैं अब तक है लेकिन शब्दों के लिए मेरा आउटपुट उल्टा है। मेरे उत्पादन

abcdefghij 
    abcdghij 
    abchij 
abij 
aj 

है मैं अब तक क्या किया

public static void main(String[] args) { 

     solve("abcdefghij"); 

    } 

    public static void solve(String word) { 

     solve(word, word.length()/2-1); 

    } 

    public static void solve(String word, int it) { 

     // print starting spaces 
     for(int i = 0; i < it; i++) 
      System.out.print(" "); 

     // print out string 
     System.out.print(word+"\n"); 


     if(word.length() > 2) { 

      int newlengthperside = (word.length() - 2)/2; 
      solve(word.substring(0, newlengthperside) + word.substring(word.length() - newlengthperside), it-1); 

     } 
    } 

मैं सिर्फ कैसे अंत के बजाय ए जे से शुरू करने के लिए पर एक सुझाव की जरूरत है। किसी भी मदद के लिए धन्यवाद। यह होमवर्क है इसलिए बस एक संकेत की सराहना की जाती है।

+6

** ** के बाद पुन: प्रारंभ करने के लिए आवर्ती कॉल के बाद प्रिंटिंग के साथ शुरू करें। – zubergu

+0

@zubergu - करुणा यह एक उत्तर नहीं था, गृहकार्य से संबंधित प्रश्न का सही जवाब। होमवर्क प्रश्न के कोड समाधान होने के मौजूदा उत्तरों को वोट नहीं दे सकता है, इसलिए मैं इसके बजाय आपकी टिप्पणी +1 करूंगा। –

उत्तर

2

आप कोड इस तरह दिखना चाहिए:

public void solve(String str) { 
    for(int i=1;i<=str.length()/2;i++) { 
     for(int j=str.length()/2-i; j>0 ;j--) { 
      System.out.print(" "); 
     } 
     System.out.print(str.substring(0,i)); 
     System.out.print(str.substring(str.length()-i)); 
     System.out.println(); 
    } 
} 

इनपुट:

"abcdefghij" 

आउटपुट:

aj 
    abij 
    abchij 
abcdghij 
abcdefghij 

यह केवल खुश पथ को शामिल किया गया है, लेकिन आप तर्क समझ में दिखा।


संपादित करें:

पुनरावर्ती दृष्टिकोण के लिए: जरूरत रिक्त स्थान की
1. गिनती संख्या और उन्हें एक स्ट्रिंग जो बाद में प्रयोग किया जाता है में डाल:

public static void solve(String word) { 
    solve(word, 0); 
} 

public static void solve(String word, int it) { 

    // print starting spaces 
    String spaces=""; 
    for(int i = 0; i < it; i++) 
     spaces+=" "; 


    if(word.length() > 2) { 
     int newlengthperside = (word.length() - 2)/2; 
     solve(word.substring(0, newlengthperside) + word.substring(word.length() - newlengthperside), it + 1); 
    } 
    System.out.print(spaces+word+"\n"); 
} 

मैं कुछ चीजें बदल दिया है।

String spaces=""; 
for(int i = 0; i < it; i++) 
    spaces+=" "; 
  1. का समाधान (शब्द, 0); // -> 0 लंबाई से

  2. हल करें (word.substring (0, newlengthperside) + word.substring (word.length() - newlengthperside), यह + 1); // -> लंबाई करने के लिए 1 जोड़ने

इनपुट:

solve("abcdefghij"); 

आउटपुट:

aj 
    abij 
    abchij 
abcdghij 
abcdefghij 
+3

मुझे विश्वास है कि उसे इस होमवर्क प्रश्न (शीर्षक में) को हल करने के लिए रिकर्सन का उपयोग करने की आवश्यकता है। – Foleosy

+1

मेरा बुरा याद आया! यह कम से कम उसे तर्क का विचार देना चाहिए। – StackFlowed

+1

@StackFlowed अभी भी मदद करने के लिए धन्यवाद। मेरा मानना ​​है कि मैं कोशिश कर सकता हूं और एल्गोरिदम ले सकता हूं और रिकर्सन का उपयोग कर इसे लागू कर सकता हूं। –

0

स्वैप अपने "// प्रिंट आउट स्ट्रिंग" अपने पुनरावर्ती कॉल के साथ कतार:

public static void solve(String word, int it) { 
    if(word.length() > 2) { 
     int newlengthperside = (word.length() - 2)/2; 
     solve(word.substring(0, newlengthperside) + word.substring(word.length() - newlengthperside), it-1); 
    } 
    // print out string 
    System.out.print(word+"\n"); 
} 

इससे पहले सबसे छोटी स्ट्रिंग आउटपुट होगी, वें एन समारोह के रूप में, यह अगले सबसे बड़े शब्द, और इतनी श्रृंखला पर आउटपुट होगा। आपको रिक्त स्थान को स्वयं भागना होगा, लेकिन इससे आपको शुरुआत मिलनी चाहिए (मुझे लगता है कि रिकर्सन और "// प्रिंट आउट स्ट्रिंग" क्षेत्रों के बीच मौजूद मौजूदा लूप काम करेगा)।