Chúng ta được cho một mảng các chuỗi mỗi chuỗi cùng độ dài. Mục tiêu là tìm các cột (ma trận chuỗi) không được sắp xếp theo thứ tự tăng dần. Ví dụ, ký tự đầu tiên của mỗi chuỗi được so sánh với ký tự đầu tiên của chuỗi tiếp theo và cứ thế đến chuỗi cuối. Nếu chúng không theo thứ tự tăng dần, tăng count. Làm điều này cho tất cả ký tự thứ hai, rồi ký tự thứ ba của tất cả chuỗi và cứ thế đến ký tự cuối.
Ví dụ
Đầu vào
Arr[] = { "abc", "bcd", "def" }
Đầu ra
Số cột: 0
Giải thích − với mỗi cột,
Cột 1: ký tự chỉ số 0: a < b < d
Cột 2: ký tự chỉ số 1: b < c < e
Cột 3: ký tự chỉ số 2: c < d < f
Tất cả ký tự tương ứng trong cột được sắp xếp tăng dần.
Đầu vào
Arr[] = { "dbd", "faf", "eeg" }
Đầu ra
Số cột: 2
Giải thích − với mỗi cột,
Cột 1 - ký tự chỉ số 0: d < f > g
Cột 2 - ký tự chỉ số 1: b > a < e
Cột 3 - ký tự chỉ số 2: d < f < g
Cột 1 và 2 có ký tự không theo thứ tự tăng dần. Count = 2.
Phương pháp sử dụng trong chương trình dưới đây
- Mảng ký tự arr[][] lưu chuỗi cùng độ dài.
- Hàm countCols(char str[3][4], int n, int len) nhận mảng chuỗi, số chuỗi và độ dài mỗi chuỗi, trả về số cột không theo thứ tự tăng dần.
- Khởi tạo count = 0.
- Col đại diện cho cột hiện tại (chỉ số chung cho tất cả chuỗi).
- Duyệt từng chuỗi đồng thời từ chỉ số đầu tiên dùng vòng for đến độ dài chuỗi (cùng độ dài cho tất cả).
- Ở đây mỗi chuỗi 3 ký tự nên so sánh str[col][j] > str[col+1][j-1] || str[col+1][j] > str[col+2][j-1]. Nếu điều kiện nào đúng, tăng count.
- Sau vòng for trả về kết quả trong count.
Ví dụ mã nguồn
#include <bits/stdc++.h>
using namespace std;
int countCols(char str[3][4], int n, int len) {
int i, j;
int count = 0;
int col = 0;
for (j = 0; j < len; j++) {
if (str[col][j] > str[col + 1][j - 1] || str[col + 1][j] > str[col + 2][j - 1])
count++;
}
return count;
}
int main() {
char arr[3][4] = { "abc", "daf", "ghi" };
cout << "\nCột không được sắp xếp: " << countCols(arr, 3, 3);
return 0;
}
Kết quả
Cột không được sắp xếp: 2