Gian hàng bán Rao vặt Hỏi đáp Thêm
Ứng dụng Thông báo Hỗ trợ Đăng ký Đăng nhập
3 thành viên trả lời
batdongsan tritue9056 liv3rp00lvn Trả lời cuối cùng: 16/03/2012

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

tuyendung_02

18/08/2008 - 13:45
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

Vui lòng đăng nhập ID VATGIA để gửi trả lời của bạn

liv3rp00lvn

16/03/2012 - 22:42

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
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
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
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
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
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
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

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.

Báo vi phạm

tritue9056

29/11/2009 - 11:41
// 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;
}
for (i=0; i<=n-1;i++)
{
dem=0;
for (j=i; j<=n-1;j++)
if (a[j]==a) {dem++;tg1=j;}
if(dem>demtg) {demtg=dem; so=0;b[0]=a;}
else
if(dem==demtg)
{ so++;
b[so]=a;
}
}
so++;
cout<<"Gia tri xuat hien nhieu nhat la :";
for (i=0;i<so;i++)
cout<<b<<" ";
cout<<" xuat hien "<<demtg<<" lan";


}

Báo vi phạm

batdongsan

18/08/2008 - 13:50
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=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 trong m1 m1[j]=xau, 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.

Báo vi phạm