Viết chương trình cho 1 xâu kí tự, hãy kiểm tra tính đối xứng của nó.
gthik: xâu đối xứng là xâu đọc từ trái sang phải hay ngược lại là như nhau.
Input: chứa 1 xâu S
Output: in ra YES nếu S là xâu đối xứng ngược lại in ra NO.
Viết chương trình nhập vào một xâu có độ dài không quá 100 ký tự từ bàn phím. Kiểm tra xâu đó có phải là xâu đối xứng hay không? (Xâu đối xứng có tính chất: Đọc nó từ phải sang trái cũng thu được kết quả giống như đọc từ trái sang phải ). Xuất xâu đã nhập ( không phân biệt chữ hoa chữ thường)
program bai_10_chuong_4;
uses crt;
var
s: string[100];
i, dem: integer;
Begin
clrscr;
write('Nhap xau vao:'); readln(s); dem:= 0;
for i:= 1 to length(s) do
if ('0'<=s[i]) and(s[i]<=’9') then dem:=dem+l;
Writeln('Trong xau s co '»dem,' chu so thap phan');
readln;
End.
uses crt;
var st:string[100];
i,d,kt:integer;
begin
clrscr;
write('Nhap xau:'); readln(st);
kt:=0;
for i:=1 to length(st) do
if st[i]<>st[length(st)-i+1] then kt:=1;
if kt=0 then write('Xau doi xung')
else writeln('Xau khong doi xung');
readln;
end.
code đây bạn c++ nha:
#include<bits/stdc++.h>
using namespace std;
char doixung(char s1[100])
{
long long i;
for(i=0;i<strlen(s1)/2;i++)
{
if(s1[i] != s1[strlen(s1)-1-i])
return 0;
}
return 1;
}
int main()
{
char s1[100];
cin>>s1;
if(doixung(s1)==0)
{
cout<<"k la cxau doi xung";
}
if(doixung(s1)==1)
{
cout<<"la xau doi xung";
}
return 0 ;
}
Xâu kí tự được gọi là đối xứng nêu thay đổi thứ tự ngược lại các kí tự của xâu thì vẫn nhận được dãy ban đầu. Ví dụ xâu “abcdcba" là đối xứng, còn xâu “1011” không là đối xứng. Thiết kế và viết chương trình kiểm tra một xâu kí tự cho trước có là đối xứng hay không. Yêu cầu đưa ra quy trình thiết kế theo phương pháp làm mịn dần.
Tham khảo:
Quy trình thiết kế theo phương pháp làm mịn dần để kiểm tra xâu kí tự có là đối xứng hay không gồm các bước sau:
Bước 1: Nhận đầu vào là xâu kí tự cần kiểm tra.
Bước 2: Loại bỏ các kí tự không cần thiết, chẳng hạn khoảng trắng và dấu cách, để chuẩn bị cho quá trình kiểm tra.
Bước 3: Chuyển đổi xâu kí tự về dạng chữ thường hoặc dạng chữ hoa (tuỳ thuộc vào yêu cầu của đề bài) để đảm bảo tính nhất quán trong quá trình kiểm tra.
Bước 4: Sử dụng một vòng lặp để so sánh các kí tự ở đầu và cuối xâu kí tự, sau đó di chuyển lần lượt về phía nhau.
Bước 5: Trong quá trình lặp lại, so sánh các kí tự ở hai vị trí tương ứng với nhau. Nếu chúng khác nhau, xâu kí tự không là đối xứng và chương trình dừng lại, trả về kết quả là "Không đối xứng".
Bước 6: Nếu các kí tự ở hai vị trí tương ứng với nhau đều giống nhau, tiếp tục di chuyển các con trỏ về phía nhau và so sánh các kí tự tiếp theo cho đến khi hoàn thành kiểm tra toàn bộ xâu kí tự.
Bước 7: Nếu tất cả các cặp kí tự ở vị trí tương ứng với nhau đều giống nhau, tức là xâu kí tự là đối xứng, chương trình dừng lại và trả về kết quả là "Đối xứng".
Bước 8: Kết thúc chương trình và đưa ra kết quả cuối cùng.
Chương trình:
def kiem_tra_doi_xung(xau):
# Loại bỏ các kí tự không cần thiết và chuyển đổi xâu về dạng chữ thường
xau = xau.replace(" ", "").lower()
n = len(xau)
# Sử dụng vòng lặp để kiểm tra từ đầu và cuối xâu kí tự
for i in range(n // 2):
if xau[i] != xau[n - i - 1]:
return "Không đối xứng"
return "Đối xứng"
Một xâu có đội dài lớn hơn 1 chỉ gồm các chữ cái La tinh in thường được gọi là số đối xứng nếu ta đọc xâu đó từ trái sang phải và từ phải sang trái là như nhau. Một xâu được gọi là siêu đối xứng, nếu nó là xâu đối xứng hoặc được tạo thành bằng cách ghép liên tiếp từ nhiều xâu đối xứng.
Yêu cầu: Cho một xâu S, hãy đếm số xâu con siêu đối xứng của S ( Xâu con của một xâu S là một đoạn liên tiếp các kí tự của S)
Dữ liệu vào: Nhập xâu S từ bàn phím
Dữ liệu ra: Xuất ra màn hình số xâu con tìm được
Nhập S=aabbccdd
Xuất ra: 10 ( Các xâu siêu đối xứng là: aa, bb, cc, dd, aabb, bbcc, ccdd, aabbcc, bbccdd, aabbccdd )
làm bằng pascal nha. mình cảm ơn!
program superSymmetricalSubstring;
var
s: string;
function isSymmetrical(str: string): boolean;
var
i, len: integer;
begin
len := length(str);
for i := 1 to len div 2 do
begin
if str[i] <> str[len - i + 1] then
begin
exit(false);
end;
end;
exit(true);
end;
function countSuperSymmetricalSubstrings(s: string): integer;
var
i, j, len, count: integer;
begin
len := length(s);
count := 0;
for i := 1 to len do
begin
for j := 2 to len - i + 1 do
begin
if isSymmetrical(copy(s, i, j)) then
begin
count := count + 1;
end;
end;
end;
count := count + len;
exit(count);
end;
begin
write('Nhap xau S: ');
readln(s);
writeln('So xau con sieu doi xung cua S: ', countSuperSymmetricalSubstrings(s));
readln;
end.
Một xâu có đội dài lớn hơn 1 chỉ gồm các chữ cái La tinh in thường được gọi là số đối xứng nếu ta đọc xâu đó từ trái sang phải và từ phải sang trái là như nhau. Một xâu được gọi là siêu đối xứng, nếu nó là xâu đối xứng hoặc được tạo thành bằng cách ghép liên tiếp từ nhiều xâu đối xứng.
Yêu cầu: Cho một xâu S, hãy đếm số xâu con siêu đối xứng của S ( Xâu con của một xâu S là một đoạn liên tiếp các kí tự của S)
VD: ababcb Xuất ra:3 (aba,bcb,ababcb
pascal nha
Dưới đây là một ví dụ về cách giải quyết bài toán này bằng ngôn ngữ Pascal:
function isPalindrome(s: string): boolean; var i, n: integer; begin n := Length(s); for i := 1 to n div 2 do begin if s[i] <> s[n - i + 1] then begin Result := false; Exit; end; end; Result := true; end; function countSuperPalindromes(s: string): integer; var i, j, n: integer; subStr: string; begin n := Length(s); Result := 0; // Đếm số xâu con đối xứng for i := 1 to n do begin subStr := '' for j := i to n do begin subStr := subStr + s[j]; if isPalindrome(subStr) then Inc(Result); end; end; // Đếm số xâu con siêu đối xứng for i := 1 to n - 1 do begin subStr := '' for j := i to n do begin subStr := subStr + s[j]; if isPalindrome(subStr) then Inc(Result); end; end; end; var s: string; begin s := 'ababcb' writeln(countSuperPalindromes(s)); end.Kết quả của ví dụ trên sẽ là 3, tương ứng với 3 xâu con siêu đối xứng của xâu "ababcb" là "aba", "bcb", và "ababcb".
Lưu ý rằng đây chỉ là một cách giải quyết bài toán và có thể tồn tại các cách giải khác.
Cho tệp XAU.TXT chứa 1 xâu ký tự
Viết chương trình đọc dữ liệu từ tệp XAU.TXT ra xâu S
Kiểm tra xâu S có là xâu đối xứng ?
M.n ai bt chỉ giúp e với
uses crt;
const fi='xau.txt'
var f1:text;
s:string;
i,d,kt:integer;
begin
clrscr;
assign(f1,fi); reset(f1);
readln(f1,s);
d:=length(s);
kt:=0;
for i:=1 to d do
if st[i]<>st[d-i+1] then kt:=1;
if kt=0 then writeln('Xau doi xung')
else writeln('Xau khong doi xung');
readln;
end.
a. Viết chương trình nhập vào 1 xâu bất kì xuất ra độ dài cùa xâu và số kí tự trống.
b. Viết chương trình nhập vào một xâu bất kì xuất ra xâu đảo ngược
c.Viết chương trình nhập vào một xâu bất kì xuất ra xâu có là xâu đối xứng hay không đối xứng
d. Viết chương trình nhập vào một xâu bất kì xuất ra xâu viết in hoa tất cả
Xâu đối xứng
Cho một xâu ký tự SS chỉ gồm các chữ cái thường a..z. Xâu đối xứng là xâu kí tự mà khi viết từ phải qua trái hay từ trái qua phải thì xâu đó không thay đổi. Ví dụ: madammadam, ioiioi là các xâu đối xứng.
Yêu cầu: Với xâu ký tự SS cho trước, hãy tính số ký tự bỏ đi ít nhất để các ký tự còn lại có thể sắp xếp được thành một xâu đối xứng.
Ví dụ:
Cho xâu aammmda thì cần bỏ 2 ký tự a và m thì xâu còn lại là ammda và xếp lại thành madam là xâu đối xứng.
Cho xâu aaabbcc thì không cần bỏ ký tự thì xâu đó xếp lại thành bcaaacb là xâu đối xứng.
Dữ liệu vào
Đọc từ file văn bản XAUDX.INP chứa một xâu ký tự SS có nn ký tự (n≤105n≤105) chỉ gồm các ký tự chữ cái thường a..z.
Kết quả
Ghi ra file văn bản XAUDX.OUT một số nguyên là số lượng ký ít nhất cần bỏ để các ký tự còn lại có thể sắp xếp được thành một xâu đối xứng.
Sample Input 1
aammmda
Sample Output 1
2
Sample Input 2
aaabbcc
Sample Output 2
0
Lưu ý :Dùng C++
#include<bits/stdc++.h>
using namespace std;
int main(){
long long i,dem[1000],d;
string s;
cin >>s;
for(i=0;i<s.size();i++)
dem[s[i]]++;
d=0;
for(i=97;i<=122;i++)
if(dem[i]%2==1)
d++;
if(d>0)
cout<<d-1;
else
cout<<0;
return 0;
}
Xâu đối xứng
Cho một xâu ký tự SS chỉ gồm các chữ cái thường a..z. Xâu đối xứng là xâu kí tự mà khi viết từ phải qua trái hay từ trái qua phải thì xâu đó không thay đổi. Ví dụ: madammadam, ioiioi là các xâu đối xứng.
Yêu cầu: Với xâu ký tự SS cho trước, hãy tính số ký tự bỏ đi ít nhất để các ký tự còn lại có thể sắp xếp được thành một xâu đối xứng.
Ví dụ:
Cho xâu aammmda thì cần bỏ 2 ký tự a và m thì xâu còn lại là ammda và xếp lại thành madam là xâu đối xứng.
Cho xâu aaabbcc thì không cần bỏ ký tự thì xâu đó xếp lại thành bcaaacb là xâu đối xứng.
Dữ liệu vào
Đọc từ file văn bản XAUDX.INP chứa một xâu ký tự SS có nn ký tự (n≤105n≤105) chỉ gồm các ký tự chữ cái thường a..z.
Kết quả
Ghi ra file văn bản XAUDX.OUT một số nguyên là số lượng ký ít nhất cần bỏ để các ký tự còn lại có thể sắp xếp được thành một xâu đối xứng.
Sample Input 1
aammmda
Sample Output 1
2
Sample Input 2
aaabbcc
Sample Output 2
0
Lưu ý :Dùng C++
Đếm số lần xuất hiện của các kí tự 'a'..'z' trong xâu S. Dễ thấy với các kí tự có số lần xuất hiện là chẵn, ta có thể xếp một nửa kí tự đó sang 2 bên thỏa mãn tính chất đối xứng. Đối với kí tự có số lần xuất hiện là lẻ, ta làm tương tự và đưa kí tự còn lại vào trung tâm. Như vậy, để xâu sau khi xóa đối xứng thì chỉ có duy nhất một kí tự có số lần xuất hiện lẻ nên ta sẽ xóa các kí tự lẻ đó, chỉ để lại 1 hoặc 0 cái cuối cùng.
code tham khảo:
int main()
{
string s;
cin >> s;
vector<int> fre(256, 0);
for (char c : s) fre[c]++;
int res = 0;
for (int x : fre) res += (x % 2 == 1);
cout << res - (res > 0);
return 0;
}
các bạn ơi giúp mình nhé!
đề : Nhập 1 xâu kí tự. Kiểm tra tính đối xứng của xâu đó. Nếu xâu không đối xứng thì đảo xâu.
lập trình pacal nhé các bạn!
uses crt;
var st,st1:string;
i,d,kt:integer;
begin
clrscr;
write('Nhap xau:'); readln(st);
d:=length(st);
kt:=0;
for i:=1 to d do
if st[i]<>st[d-i+1] then kt:=1;
if kt=0 then writeln('Day la xau doi xung')
else begin
st1:=''
for i:=d downto 1 do
st1:=st1+st[i];
writeln('Xau dao cua xau ',st,' la: ',st1);
end;
readln;
end.