Computer >> Máy Tính >  >> Lập trình >> C ++

In kết hợp của chuỗi Zig-Zag trong n Hàng trong C ++


Trong bài toán này, chúng ta đưa ra một chuỗi là một chuỗi các ký tự. Và chúng ta được cung cấp độ dài của mẫu zig-zag và chúng ta phải in chuỗi nối của chuỗi zig-zag này thành n hàng.

Hãy xem một vài ví dụ để hiểu rõ hơn về khái niệm này,

VÍ DỤ

Input : string = ‘STUVWXYZ’ n = 2.
Output : SUWYTVXZ

Giải thích - kiểu zig-zag cho chuỗi đối với kiểu 2 hàng là -

S    U    W    Y
   T    V    X    Z

Phần nối của hình zig-zag này là - SUWYTVXZ.

Ví dụ

Input : string = ABCDEFGH n = 3
Output: ADGBEHCF

Giải thích - mẫu ngoằn ngoèo cho chuỗi có ba hàng là -

A    E
   B D F H
  C G

Phần nối của mẫu ngoằn ngoèo là - AEBDFHCG

Bây giờ khi chúng ta biết vấn đề, chúng ta hãy thiết kế một giải pháp cho nó. ở đây chúng ta sẽ truyền xuống và phần tử tiếp theo của chuỗi cho đến khi cái chết trở thành n. và sau đó đứng dậy thích hợp cho đến khi cái chết trở thành con số không và sau đó lại đi xuống. và sau đó in từng hàng cho giải pháp.

Dựa trên khái niệm này, hãy tìm ra một thuật toán có thể giải quyết vấn đề,

Thuật toán

Step 1 : Take an array of string of size n, string arr[n], row for current row no. i.e. string in the array and the direction as 1(indicating downward traversal).
Step 2 : Traverse the string and follow step 3 - 7. For every character of the string.
Step 3 : Append the character to the current string in the array based on the value of row.
Step 4 : If row = n-1, direction = 1.
Step 5 : if row = 0, direction = -1.
Step 6 : if direction = 1, row++ .
Step 7 : else row--.
Step 8 : print all string on the array from 0 to n-1 in sequence.

Ví dụ

Bây giờ, dựa trên thuật toán này, hãy tạo một chương trình để triển khai giải pháp của chúng tôi -

#include<bits/stdc++.h>
using namespace std;
void ZigZagConcatenationString(string str, int n){
   if (n == 1){
      cout << str;
      return;
   }
   int len = str.length();
   string arr[n];
   int row = 0;
   int direction = 1;
   bool down;
   for (int i = 0; i < len; ++i){
      arr[row].push_back(str[i]);
      if (row == n-1)
         direction = -1;
      else if (row == 0)
         direction = 1;
      (direction == 1)? (row++): (row--);
   }
   for (int i = 0; i < n; ++i)
      cout << arr[i];
}
int main(){
   string str = "ABCDEFGH";
   int n = 3;
   ZigZagConcatenationString(str, n);
   return 0;
}

Đầu ra

AEBDFHCG