2016-05-11 8 views
-4

入力に奇数桁があることを考慮して、C++で次のパターンを生成するにはどうすればよいですか?次のパターンをC++で印刷するプログラム

P   M 
R  A 
    O R 
    G 
    O R 
R  A 
P   M 

私は次のコードを試しましたが、それを進める方法はわかりません。不思議のような

#include <iostream> 
#include <cstring> 
using namespace std; 

int main() 
{ 
    char word[100]; 
    int len, temp; 
    cout << "Input word with odd letters: \n"; 
    cin >> word; 
    len = strlen(word); 
    cout << "Entered word was : "<< word << " and of size: " << strlen(word) << "\n"; 
    if(len % 2==0) 
    { 
     cout << "Please enter a word with odd number of letters!"; 
    } 
    else 
    { 
     int mid; 
     mid = (len - 1)/2; 
     cout << "The middle number is : " << mid+1 << " and character is " << word[mid] << "\n"; 
     temp = len - 1; 
     for(int i=0; i<len; i++) 
     { 
      // Some logic to display it just like above 
     } 
     cout << "done" << endl; 
    } 
} 

答えて

1
#include <iostream> 
#include <cstring> 
using namespace std; 

void printSpace(int n) 
{ 
    for(int i=0; i<n; i++) 
    { 
     cout << " "; 
    } 
} 

int main() 
{ 
    char word[100]; 
    int len, temp; 
    cout << "Input word with odd letters: \n"; 
    cin >> word; 
    len = strlen(word); 
    cout << "Entered word was : "<< word << " and of size: " << strlen(word) << "\n"; 
    if(len % 2==0) 
    { 
     cout << "Please enter a word with odd number of letters!"; 
    } 
    else 
    { 
     int mid; 
     mid = (len - 1)/2; 
     cout << "The middle number is : " << mid+1 << " and character is " << word[mid] << "\n"; 
     temp = len - 1; 

     int up=len-2, side=0, down=1; 
     char a,b; 
     for(int i=0; i<len; i++) 
     { 
      if(i < mid) 
      { 
       a = word[i]; 
       b = word[len-i-1]; 
      } 
      else 
      { 
       a = word[len-i-1]; 
       b = word[i]; 
      } 

      printSpace(side); 

      cout << a; 

      if(i < mid) 
      { 
       printSpace(up); 
       up -= 2; 
      } 
      else if(i > mid) 
      { 
       printSpace(down); 
       down += 2; 
      } 

      if(i != mid) cout << b; 

      printSpace(side); 
      cout << endl; 

      if(i < mid) side++; 
      else side--; 
     } 
     cout << "done" << endl; 
    } 
} 
+0

作品!あなたに感謝します。 –

+0

このコードの背後にある論理を説明してください。私はそれを見ましたが、なぜ、私たちは、上下、側面が必要なのか理解できませんでした。私たちはそれで何をしていますか? –

+0

私は何枚のスペースを印刷する必要があるのか​​を数えたので、文字は正しい位置にあります。 – peterhzsti

関連する問題