Đến nội dung

Hình ảnh

Dãy con đúng


  • Please log in to reply
Chủ đề này có 4 trả lời

#1
PlanBbyFESN

PlanBbyFESN

    Thiếu úy

  • Điều hành viên OLYMPIC
  • 637 Bài viết

Cho xâu kí tự S bao gồm toàn các ký tự ‘a’ và ‘b’, không quá 255 ký tự. Dãy con đúng của dãy S là một dãy con liên tục bất kì của S  bao gồm các ký tự giống nhau. Dãy con đúng bậc 1 của dãy S là một dãy con liên tục bất kỳ của dãy S bao gồm các ký tự giống nhau nhưng được thêm 1 ký tự khác (ví dụ ‘aaaabaaa’, baaaa, aaaab). Trường hợp đặc biệt, dãy S chỉ có 1 loại ký tự thì dãy con đúng cũng chính là dãy con đúng bậc 1.

 

Yêu cầu:  a/ Hãy tính độ dài lớn nhất dãy con đúng của dãy S.

                  b/ Hãy tính độ dài lớn nhất dãy con đúng bậc 1 của dãy S.

Ví dụ: ‘aaabaaabbaaaaa’

Độ dài lớn nhất của dãy con đúng: 5           (‘aaabaaabbaaaaa’)

Độ dài lớn nhất của dãy con đúng bậc 1: 7     (‘aaabaaabbaaaaa’)

 


:huh:


#2
Mystic

Mystic

    Thượng sĩ

  • Thành viên
  • 240 Bài viết


trong pascal hả

Đúng rồi bạn .

Mà trong chương trình lớp 8 thì sgk chưa đi sâu vào vấn đề này cho lắm !

Chỉ có hsg Tin hay những bạn chăm tìm hiểu thì có thể biết rộng hơn thôi ...

Bài này tối về mình post lên cho giờ mình đang bận 1 chút công việc.

Mình xin "trich dan"trước 1 ít về câu a:

m:='a';n:='b';t:=0;j:=0;

for i:=1 to length(s) do

if s[i]=m then t:=t+1 else

begin

j:=j+1;

a[j]:=t;

t:=0;

end;

t:=0;

 

for i:=1 to length(s) do

if s[i]=n then t:=t+1 else

begin

j:=j+1;

a[j]:=t;

t:=0;

end;

=>Sau đó sắp xếp mảng theo thứ tự giảm dần thì tìm đc MAx độ dài dãy con đúng (Chính là a[1]);


>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#3
Mystic

Mystic

    Thượng sĩ

  • Thành viên
  • 240 Bài viết


Cho xâu kí tự S bao gồm toàn các ký tự ‘a’ và ‘b’, không quá 255 ký tự. Dãy con đúng của dãy S là một dãy con liên tục bất kì của S  bao gồm các ký tự giống nhau. Dãy con đúng bậc 1 của dãy S là một dãy con liên tục bất kỳ của dãy S bao gồm các ký tự giống nhau nhưng được thêm 1 ký tự khác (ví dụ ‘aaaabaaa’, baaaa, aaaab). Trường hợp đặc biệt, dãy S chỉ có 1 loại ký tự thì dãy con đúng cũng chính là dãy con đúng bậc 1.

 

Yêu cầu:  a/ Hãy tính độ dài lớn nhất dãy con đúng của dãy S.

                  b/ Hãy tính độ dài lớn nhất dãy con đúng bậc 1 của dãy S.

Ví dụ: ‘aaabaaabbaaaaa’

Độ dài lớn nhất của dãy con đúng: 5           (‘aaabaaabbaaaaa’)

Độ dài lớn nhất của dãy con đúng bậc 1: 7     (‘aaabaaabbaaaaa’)

 

program ft;
uses crt;
var x,i,n,j,k,l,t,p,tg:integer;
a,b,c:array[1..1000] of integer;
s,s1,s2,z:string;
m,r:char;
function kt(s1:string):boolean;
var ktt:boolean;
i,j,k:integer;
begin
ktt:=false;
k:=0;
for i:=1 to length(s1)-1 do
if s1[i]=s1[i+1] then k:=k+1;
if k=length(s1) then ktt:=true;
kt:=ktt;
end;
function kopo(s1:string):integer;
var i,j,k,l:integer;
m,z:char;
begin
k:=0;l:=0;
m:='a';
z:='b';
for i:=1 to length(s1) do
if s1[i]=m then k:=k+1;
for i:=1 to length(s1) do
if s1[i]=z then l:=l+1;
if k>=l then kopo:=k else kopo:=l;
end;
begin
clrscr;
write('Nhap xau:');readln(s);
m:='a';
r:='b';
j:=0;
k:=1;
repeat
t:=0;
for i:=k to length(s) do
if s[i]=m then t:=t+1 else break;
j:=j+1;
a[j]:=t;
k:=k+1;
until k>length(s);
k:=1;
repeat
t:=0;
for i:=k to length(s) do
if s[i]=r then t:=t+1 else break;
j:=j+1;
a[j]:=t;
k:=k+1;
until k>length(s);
for i:=1 to j-1 do
for k:=i+1 to j do
if a[i]<a[k] then
begin
tg:=a[i];
a[i]:=a[k];
a[k]:=tg;
end;
if kt(s) then writeln('Do dai lon nhat cua day con dung:',length(s)) else
writeln('Do dai lon nhat cua day con dung:',a[1]);
k:=1;
j:=0;
repeat
z:='';
for i:=k to length(s) do
    z:=z+s[i];
if kopo(z)=length(z)-1 then
   begin
   j:=j+1;
   c[j]:=length(z);
   end;
k:=k+1;
until k>length(s);
k:=length(s);
repeat
z:='';
for i:=k downto 1 do
    z:=z+s[i];
if kopo(z)=length(z)-1 then
   begin
   j:=j+1;
   c[j]:=length(z);
   end;
k:=k-1;
until k>length(s);
for i:=1 to j-1 do
for l:=i+1 to j do
if c[i]<c[l] then
begin
tg:=c[i];
c[i]:=c[l];
c[l]:=tg;
end;
if kt(s) then writeln('Do dai lon nhat cua day con dung bac 1:',length(s)) else
writeln('Do dai lon nhat cua day con dung bac 1:',c[1]);
readln
end.

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#4
PlanBbyFESN

PlanBbyFESN

    Thiếu úy

  • Điều hành viên OLYMPIC
  • 637 Bài viết

 

 

Chương trình chạy trên Tubor hay Free bạn nói rõ giúp! Chứ chạy trên Free là không được!


:huh:


#5
Zx NTL xZ

Zx NTL xZ

    Binh nhất

  • Thành viên mới
  • 24 Bài viết

Chương trình chạy trên Tubor hay Free bạn nói rõ giúp! Chứ chạy trên Free là không được!

Với Pascal thì nên chạy trên Tubor Pascal chứ Free Pascal hay bị lỗi lung tung chẳng hạn lỗi tệp,...


... Cuộc sống làm ta gục ngã ...

             Nhưng ! ... ta có thể lựa chọn đứng dậy hay là không





1 người đang xem chủ đề

0 thành viên, 1 khách, 0 thành viên ẩn danh