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

Chương trình C++ sinh chuỗi ngẫu nhiên không trùng ký tự


Sinh ra N chuỗi ký tự, mỗi chuỗi độ dài M, từ một chuỗi gốc cho trước. Các ký tự trong mỗi chuỗi sinh ra không được trùng lặp.

Thuật toán

Hàm GenerateSequence(base, n, len, output):
  Với i từ 0 đến n-1:
    Nếu i == 0: lấy ký tự ngẫu nhiên từ base.
    Ngược lại:
      Sinh chỉ số ngẫu nhiên in.
      Nếu base[in] đã có trong output: sinh lại (goto).
      Thêm base[in] vào output.
  Kết thúc chuỗi bằng '\0'.

Ví dụ mã nguồn

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

void GenerateSequence(char base[], int n, int len, char* output) {
    for (int i = 0; i < n; i++) {
        if (i == 0)
            output[i] = base[rand() % len];
        else {
            int in;
            retry:
            in = rand() % len;
            for (int k = 0; k < i; k++)
                if (base[in] == output[k]) goto retry;
            output[i] = base[in];
        }
    }
    output[n] = '\0';
}

int main() {
    char base[100];
    int numStr, strLen;
    cout << "Chuoi goc: "; cin >> base;
    cout << "So chuoi can sinh: "; cin >> numStr;
    cout << "Do moi chuoi: "; cin >> strLen;
    int len = strlen(base);
    for (int i = 0; i < numStr; i++) {
        char seq[strLen+1];
        GenerateSequence(base, strLen, len, seq);
        cout << "Chuoi " << i+1 << ": " << seq << endl;
    }
    return 0;
}

Đầu ra mẫu

Chuoi goc: tutorialspoint
So chuoi can sinh: 7
Do moi chuoi: 6
Chuoi 1: tuanol
Chuoi 2: itlurp
Chuoi 3: tonaiu
Chuoi 4: untlri
Chuoi 5: liorpt
Chuoi 6: liusto
Chuoi 7: luisot