Chương trình chia ngẫu nhiên một mảng số nguyên hoặc chuỗi ký tự thành các phân đoạn (partition) có kích thước ngẫu nhiên.
Thuật toán
Chọn chế độ 1 (số) hoặc 2 (ký tự).
Nếu số:
Nhập n và mảng a[].
l = 0.
Khi n > 0:
i = rand() % n + 1 (kích thước phân đoạn).
In a[l] đến a[l+i-1].
l += i; n -= i.
Nếu ký tự:
Nhập chuỗi, tính độ dài n.
Tương tự chia ngẫu nhiên chuỗi.
Ví dụ mã nguồn
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main() {
int n, i, j, l, choice;
cout << "1: So nguyen, 2: Ky tu: "; cin >> choice;
if (choice == 1) {
cout << "So phan tu: "; cin >> n;
int a[n];
for (i = 0; i < n; i++) {
cout << "Phan tu " << i+1 << ": "; cin >> a[i];
}
cout << "Phan hoach ngau nhien:\n";
l = 0;
while (n > 0) {
cout << "\t[ ";
i = rand() % n + 1;
n -= i;
for (j = 0; j < i; j++) cout << a[l++] << " ";
cout << "]\n";
}
} else {
char ch[100];
cout << "Nhap chuoi: "; cin >> ch;
n = strlen(ch);
cout << "Phan hoach ngau nhien:\n";
l = 0;
while (n > 0) {
cout << "\t[ ";
i = rand() % n + 1;
n -= i;
for (j = 0; j < i; j++) cout << ch[l++] << " ";
cout << "]\n";
}
}
return 0;
}
Đầu ra mẫu
1: So nguyen So phan tu: 10 Phan tu: 10 9 8 7 6 5 4 3 2 1 Phan hoach ngau nhien: [ 10 9 ] [ 8 7 6 5 ] [ 4 3 2 ] [ 1 ] 2: Ky tu Nhap chuoi: ABCDEFGHIJKLMNOPQRSTUVWXYZ Phan hoach ngau nhien: [ A B C D E F G H I J K L M N O P ] [ Q R S T U V W X ] [ Y ] [ Z ]