Kiểm tra xâu đối xứng pascal và C++

Đề bài: Nhập vào một xâu S từ bàn phím rồi kiểm tra xem đó có phải là xâu đối xứng hay không?

– Xâu đối xứng là xâu khi đọc từ trái sang phải hoặc đọc từ phải sang trái đều như nhau

VD: “aba”, “abcba”, “12321” là xâu đối xứng. Còn “1232”, “aabcb”, “miticc06” không là xâu đối xứng.

I. Hướng dẫn giải BT kiểm tra xâu đối xứng trong pascal C++

1. Kiểm tra xâu đối xứng cách 1

– Cách đơn giản nhất là ta sẽ đọc ngược lại xâu S và lưu vào biến S1. sau đó kiểm tra 2 xâu có hoàn toàn giống nhau hay không?

ví dụ:

S=”abcde” => S1=”edcba”. 2 xâu này không giống nhau nên không là xâu đối xứng.

S=”aabccbaa” => S1=”aabccbaa”. 2 xâu này giống nhau hoàn toàn nên kết luận được là xâu đối xứng.

– Đây cũng là cách mà trong sách giáo khoa Tin học 11 chia sẻ.

  • Đầu tiên chúng ta sẽ tạo xâu đảo ngược so với xâu ban đầu,

  • Sau đó chúng ta so sánh  if (s1=s) then ..... 

a. Code kiểm tra xâu đối xứng cách 1 Pascal 

b. Code kiểm tra xâu đối xứng cách 1 c++

2. Kiểm tra xâu đối xứng cách 2

– Cách thứ 2 cải tiến từ cách thứ nhất, thay vì sinh lại một xâu nghịch đảo rồi so sánh thì chúng ta so sánh trực tiếp từng kí tự trên xâu gốc, nên thời gian chạy sẽ nhanh hơn cách thứ nhất.

– Nhận xét chung: do xâu đối xứng là xâu khi đảo ngược lại sẽ giống hoàn toàn vơi xâu gốc nên chúng ta có thể xét dựa vào so sánh lần lượt các phần tử đầu xâu với các phần tử cuối xâu.

ví dụ s=”abba”

ta có s[1]=s[4], s[2]=s[3] nên kết luận nó là xâu đối xứng.

Như vậy chúng ta chỉ cần cho biến i chạy từ 1 đến (độ dài xâu) chia 2 và so sánh s[i] với s[(độ dài xâu) – i +1] nếu tồn tại một chỗ mà 2 kí tự khác nhau chúng ta có thể kết luận ngay nó ko đối xứng.

a. Code tham khảo kiểm tra xâu đối xứng cách 2 pascal

b. Code tham khảo kiểm tra xâu đối xứng cách 2 c++

II. Bài tập tương tự

1. Hãy kiểm tra số nguyên được nhập vào có là số đối xứng không?

– Ở bài này có 2 cách làm là sử dụng div mod hoặc cũng có thể xử lí bằng xâu như ở trên.

2. Viết chương trình kiểm tra mảng số nguyên nhập vào có là xâu đối xứng hay không?

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *