Bài tập  /  Bài đang cần trả lời

Xâu đối xứng. Viết chương trình nhập một xâu chỉ chứa kí tự chữ cái in hoa (A, B, ..., Z) và kí tự dấu hỏi (?)

LẬP TRÌNH PASCAL
Bài 3:  Xâu đối xứng. Viết chương trình nhập một xâu chỉ chứa kí tự chữ cái in hoa (A, B, ..., Z) và kí tự dấu hỏi (?). In ra màn hình xâu đối xứng có thứ tự từ điển nhỏ nhất tạo được từ xâu đã nhập bằng cách thay mỗi kí tự ‘?’ bằng một trong các kí tự ‘A’, ‘B’, ..., ‘Z’ (Nếu không tìm được thì ghi: XAU KHONG DOI XUNG). Ví dụ: Nhập xâu: DE???D thì in ra kết quả: Xau doi xung: DEAAED Nhập xâu: MH??GM thì in ra kết quả: XAU KHONG DOI XUNG
1 Xem trả lời
Hỏi chi tiết
116
Tham khảo câu trả lời từ Trợ lý ảo Lazi
```Pascal
program Bai3_XauDoiXung;

uses crt;

var
s, s1, s2: string;
i, j: integer;
flag: boolean;

function isPalindrome(str: string): boolean;
var
i, j: integer;
begin
i := 1;
j := Length(str);
while i < j do
begin
if str[i] <> str[j] then
begin
isPalindrome := false;
Exit;
end;
Inc(i);
Dec(j);
end;
isPalindrome := true;
end;

begin
clrscr;

write('Nhap xau: ');
readln(s);

s1 := s;
s2 := s;
flag := false;

for i := 1 to Length(s) do
begin
if s[i] = '?' then
begin
s1[i] := 'A';
s2[i] := 'Z';
flag := true;
end;
end;

if flag then
begin
repeat
if isPalindrome(s1) then
begin
writeln('Xau doi xung: ', s1);
break;
end;
if s1 = s2 then
begin
writeln('Xau khong doi xung');
break;
end;

j := Length(s);
while s1[j] = 'Z' do
begin
s1[j] := 'A';
Dec(j);
end;
s1[j] := Chr(Ord(s1[j]) + 1);
until false;
end
else
writeln('Xau khong doi xung');

readln;
end.
```

Chúng ta sẽ nhập một xâu từ người dùng và tạo ra 2 xâu mới `s1` và `s2` bằng cách thay thế các kí tự `?` trong xâu ban đầu bằng `A` và `Z` tương ứng. Sau đó, chúng ta sẽ kiểm tra xem xâu `s1` có phải là xâu đối xứng không. Nếu đúng, in ra xâu đối xứng, nếu không, thì sẽ thay đổi các kí tự `?` trong xâu `s1` từ `A` đến `Z` cho đến khi tìm được xâu đối xứng hoặc không tìm được.

Để kiểm tra xâu có phải là xâu đối xứng hay không, chúng ta sẽ so sánh kí tự đầu tiên với kí tự cuối, kí tự thứ hai với kí tự cuối thứ hai và cứ tiếp tục như vậy cho đến khi gặp kí tự không giống nhau hoặc đã so sánh hết các kí tự.

Nếu không tìm được xâu đối xứng, chương trình sẽ in ra thông báo "Xau khong doi xung".
3
0
manh
13/03 19:35:18
+5đ tặng
program XauDoiXung;

uses
  SysUtils;

var
  inputStr, resultStr: string;
  found: Boolean;

function IsPalindrome(s: string): Boolean;
var
  i, j: Integer;
begin
  j := Length(s);
  for i := 1 to Length(s) div 2 do
  begin
    if s[i] <> s[j] then
    begin
      IsPalindrome := False;
      Exit;
    end;
    Dec(j);
  end;
  IsPalindrome := True;
end;

function NextChar(c: Char): Char;
begin
  if c = '?' then
    Result := 'A'
  else if c = 'Z' then
    Result := '?'
  else
    Result := Succ(c);
end;

procedure SolvePalindrome;
var
  i: Integer;
begin
  Write('Nhap xau: ');
  ReadLn(inputStr);

  found := False;
  repeat
    resultStr := inputStr;
    for i := 1 to Length(inputStr) do
    begin
      if inputStr[i] = '?' then
        resultStr[i] := 'A'
      else
        resultStr[i] := inputStr[i];
    end;

    if IsPalindrome(resultStr) then
    begin
      found := True;
      WriteLn('Xau doi xung: ', resultStr);
    end;

    inputStr := resultStr;
    i := Length(inputStr);
    while (i > 0) and (inputStr[i] = 'Z') do
    begin
      inputStr[i] := '?';
      Dec(i);
    end;
    if i > 0 then
      inputStr[i] := NextChar(inputStr[i]);
  until (i = 0);

  if not found then
    WriteLn('XAU KHONG DOI XUNG');
end;

begin
  SolvePalindrome;
end.
 

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường
×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500k
Gửi câu hỏi
×