Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

In chuỗi Zig-Zag nối các hàng C++

Cho chuỗi và số hàng n. Viết chuỗi theo đường zig-zag n hàng, sau đó nối các hàng lại. Ví dụ: "STUVWXYZ", n=2 → hàng 1: S U W Y, hàng 2: T V X Z → kết quả "SUWYTVXZ". n=3, "ABCDEFGH" → "AEBDFHCG".

Mô phỏng zig-zag

Mảng string arr[n] lưu từng hàng. Biến row=0, dir=1 (xuống). Duyệt chuỗi: thêm ký tự vào arr[row]. Cập nhật row += dir. Đổi dir khi chạm đỉnh/đáy.

Ví dụ minh họa

#include <bits/stdc++.h>
using namespace std;

void zigzagConcat(string str, int n) {
    if (n == 1) { cout << str; return; }
    
    vector rows(n);
    int row = 0, dir = 1;
    
    for (char c : str) {
        rows[row].push_back(c);
        if (row == n-1) dir = -1;
        else if (row == 0) dir = 1;
        row += dir;
    }
    
    for (auto& r : rows) cout << r;
}

int main() {
    string str = "ABCDEFGH";
    int n = 3;
    zigzagConcat(str, n);  // AEBDFHCG
    return 0;
}

Kết quả

AEBDFHCG