Em có Bài tập về xâu kí tự. Các bác giúp em với

Em có bài này mong các bác hướng dẫn giúp em. Nhập 1 chuỗi từ bàn phím, in ra số lần xuất nhiều nhất của 1 kí tự trong chuỗi. VD: Nhập chuỗi là: nguyen van thì kí tự "n" xuất hiện nhiều nhất trong chuỗi, in số lần xuất hiện ra và kí tự đó ra. Mong các bác giúp em
Trả lời 15 năm trước
1. Khai báo 2 mảng m1, m2. a. Mảng 1 lưu các ký tự xuất hiện trong xâu, bỏ qua ký tự lặp (nếu là ASCII từ bàn phím thì trên lý thuyết mảng chỉ có tối đa 256 phần tử, mặc dầu sẽ không bao giờ tới được). b. Mảng 2 lưu tần số xuất hiện của ký tự trong xâu được nhập đó. 2. Duyệt xâu từ đầu đến cuối xau[i] i=0,length-1, đồng thời đẩy từng ký tự nếu chưa có vào mảng 1, bằng cách tìm xau[i] trong m1 m1[j]=xau[i], khởi tạo tần số xuất hiện m2[j]=0, nếu có cập nhật tần số xuất hiện m2[j]=m2[j]+1. 3. Một vòng lặp tìm max trong m2 có chỉ số k, in ra kết quả ký tự m1[k] có tần số xuất hiện m2[k] lớn nhất. Có thể gộp bước này vào bước 2 luôn để xác định max cho tối ưu, nhưng code viết sẽ hơi khó đọc.
luan
luan
Trả lời 14 năm trước
// Nhap vao mot mang va tim gia tri xuat hien nhieu nhat #include <iostream.h> int main() { int n,i,j,a[100],b[100],dem=0,demtg=0,tg1,tg2,so; cout<<"Nhap n: ";cin>>n; for (i=0; i<=n-1;i++) { cout<<"Nhap phan tu thu "<<i<<" cua mang: ";cin>>a[i]; } for (i=0; i<=n-1;i++) { dem=0; for (j=i; j<=n-1;j++) if (a[j]==a[i]) {dem++;tg1=j;} if(dem>demtg) {demtg=dem; so=0;b[0]=a[i];} else if(dem==demtg) { so++; b[so]=a[i]; } } so++; cout<<"Gia tri xuat hien nhieu nhat la :"; for (i=0;i<so;i++) cout<<b[i]<<" "; cout<<" xuat hien "<<demtg<<" lan"; }
Nguyễn Mạnh Linh
Nguyễn Mạnh Linh
Trả lời 12 năm trước

PROGRAM DKT;
USES crt;
VAR S:STRING;
i,n,j,max:INTEGER;
A:ARRAY[-100..100] OF INTEGER;
B:ARRAY[-100..100] OF BOOLEAN;
BEGIN
write('Moi nhap xau S: ');
readln(S);
i:=1;
A[1]:=0;
n:=length(S);
FOR j:=1 TO 100 DO B[j]:=TRUE;
WHILE i<=n DO
BEGIN
FOR j:= n DOWNTO i DO
IF B[j] THEN
IF S[j]=S[i] THEN
BEGIN
A[i]:=A[i]+1;
B[j]:=FALSE;
END;
i:=i+1;
WHILE B[i]=FALSE DO
i:=i+1;
END;
max:=0;
FOR j:=1 TO n DO
IF max<a[j] THEN BEGIN max:=a[j];i:=j; END;
FOR j:=1 TO n DO
IF a[j]=max THEN
writeln(S[j],' xuat hien nhieu nhat vs ',max,' lan');
readln;
END.
PROGRAM DKT;
USES crt;
VAR S:STRING;
i,n,j,max:INTEGER;
A:ARRAY[-100..100] OF INTEGER;
B:ARRAY[-100..100] OF BOOLEAN;
BEGIN
write('Moi nhap xau S: ');
readln(S);
i:=1;
A[1]:=0;
n:=length(S);
FOR j:=1 TO 100 DO B[j]:=TRUE;
WHILE i<=n DO
BEGIN
FOR j:= n DOWNTO i DO
IF B[j] THEN
IF S[j]=S[i] THEN
BEGIN
A[i]:=A[i]+1;
B[j]:=FALSE;
END;
i:=i+1;
WHILE B[i]=FALSE DO
i:=i+1;
END;
max:=0;
FOR j:=1 TO n DO
IF max<a[j] THEN BEGIN max:=a[j];i:=j; END;
FOR j:=1 TO n DO
IF a[j]=max THEN
writeln(S[j],' xuat hien nhieu nhat vs ',max,' lan');
readln;
END.
PROGRAM DKT;
USES crt;
VAR S:STRING;
i,n,j,max:INTEGER;
A:ARRAY[-100..100] OF INTEGER;
B:ARRAY[-100..100] OF BOOLEAN;
BEGIN
write('Moi nhap xau S: ');
readln(S);
i:=1;
A[1]:=0;
n:=length(S);
FOR j:=1 TO 100 DO B[j]:=TRUE;
WHILE i<=n DO
BEGIN
FOR j:= n DOWNTO i DO
IF B[j] THEN
IF S[j]=S[i] THEN
BEGIN
A[i]:=A[i]+1;
B[j]:=FALSE;
END;
i:=i+1;
WHILE B[i]=FALSE DO
i:=i+1;
END;
max:=0;
FOR j:=1 TO n DO
IF max<a[j] THEN BEGIN max:=a[j];i:=j; END;
FOR j:=1 TO n DO
IF a[j]=max THEN
writeln(S[j],' xuat hien nhieu nhat vs ',max,' lan');
readln;
END.
PROGRAM DKT;
USES crt;
VAR S:STRING;
i,n,j,max:INTEGER;
A:ARRAY[-100..100] OF INTEGER;
B:ARRAY[-100..100] OF BOOLEAN;
BEGIN
write('Moi nhap xau S: ');
readln(S);
i:=1;
A[1]:=0;
n:=length(S);
FOR j:=1 TO 100 DO B[j]:=TRUE;
WHILE i<=n DO
BEGIN
FOR j:= n DOWNTO i DO
IF B[j] THEN
IF S[j]=S[i] THEN
BEGIN
A[i]:=A[i]+1;
B[j]:=FALSE;
END;
i:=i+1;
WHILE B[i]=FALSE DO
i:=i+1;
END;
max:=0;
FOR j:=1 TO n DO
IF max<a[j] THEN BEGIN max:=a[j];i:=j; END;
FOR j:=1 TO n DO
IF a[j]=max THEN
writeln(S[j],' xuat hien nhieu nhat vs ',max,' lan');
readln;
END.
PROGRAM DKT;
USES crt;
VAR S:STRING;
i,n,j,max:INTEGER;
A:ARRAY[-100..100] OF INTEGER;
B:ARRAY[-100..100] OF BOOLEAN;
BEGIN
write('Moi nhap xau S: ');
readln(S);
i:=1;
A[1]:=0;
n:=length(S);
FOR j:=1 TO 100 DO B[j]:=TRUE;
WHILE i<=n DO
BEGIN
FOR j:= n DOWNTO i DO
IF B[j] THEN
IF S[j]=S[i] THEN
BEGIN
A[i]:=A[i]+1;
B[j]:=FALSE;
END;
i:=i+1;
WHILE B[i]=FALSE DO
i:=i+1;
END;
max:=0;
FOR j:=1 TO n DO
IF max<a[j] THEN BEGIN max:=a[j];i:=j; END;
FOR j:=1 TO n DO
IF a[j]=max THEN
writeln(S[j],' xuat hien nhieu nhat vs ',max,' lan');
readln;
END.
PROGRAM DKT;
USES crt;
VAR S:STRING;
i,n,j,max:INTEGER;
A:ARRAY[-100..100] OF INTEGER;
B:ARRAY[-100..100] OF BOOLEAN;
BEGIN
write('Moi nhap xau S: ');
readln(S);
i:=1;
A[1]:=0;
n:=length(S);
FOR j:=1 TO 100 DO B[j]:=TRUE;
WHILE i<=n DO
BEGIN
FOR j:= n DOWNTO i DO
IF B[j] THEN
IF S[j]=S[i] THEN
BEGIN
A[i]:=A[i]+1;
B[j]:=FALSE;
END;
i:=i+1;
WHILE B[i]=FALSE DO
i:=i+1;
END;
max:=0;
FOR j:=1 TO n DO
IF max<a[j] THEN BEGIN max:=a[j];i:=j; END;
FOR j:=1 TO n DO
IF a[j]=max THEN
writeln(S[j],' xuat hien nhieu nhat vs ',max,' lan');
readln;
END.

PROGRAM DKT;

USES crt;

VAR S:STRING;

i,n,j,max:INTEGER;

A:ARRAY[-100..100] OF INTEGER;

B:ARRAY[-100..100] OF BOOLEAN;

BEGIN

write('Moi nhap xau S: ');

readln(S);

i:=1;

A[1]:=0;

n:=length(S);

FOR j:=1 TO 100 DO B[j]:=TRUE;

WHILE i<=n DO

BEGIN

FOR j:= n DOWNTO i DO

IF B[j] THEN

IF S[j]=S[i] THEN

BEGIN

A[i]:=A[i]+1;

B[j]:=FALSE;

END;

i:=i+1;

WHILE B[i]=FALSE DO

i:=i+1;

END;

max:=0;

FOR j:=1 TO n DO

IF max<a[j] THEN

BEGIN max:=a[j];

i:=j;

END;

FOR j:=1 TO n DO

IF a[j]=max THEN

writeln(S[j],' xuat hien nhieu nhat vs ',max,' lan');

readln;

END.