Bài tập thi hs giỏi

H

hung1xpro96

Last edited by a moderator:
P

p_trk

ý tưởng của mình là xét đệ qui
procedure xuli(n);
cho chạy xâu : nếu là các chữ số liền nhau thì lưu vào một phần tử trong mảng;
mặt khác cho break for to do xâu, đệ qui tiếp tiếp xuli(i);
sau đó đổi xâu => số => sắp xếp
Mình chưa thử code các bạn code xem sao rồi post lên hocmai
 
H

hung1xpro96

Bài này khó vãi ***. Đề 15' của t có câu này cả lớp ko ai làm đc. Chắc bó tay vs đề HK wa'

Vậy chắc bạn học chuyên tin hả hay sao mà bài khó vậy mà chỉ làm 15' thui chắc bài 1 tiết cỡ thi học sinh giỏi cấp quốc gia lun nhỉ =))=)):)):))----------
P/s : Lần sau có chém thì chém vừa vừa thui kẻo không ai tin đâu :khi (194):
 
O

ochuotqb

Mã:
var a: array [0..255] of longint;
    st,ch,sr:string;
    b,i,m,j:byte;
    c,t:longint;
    code:integer;
 begin
  write('Nhap xau: ');
  readln(st);
i:=0;
while i<=length(st) do
  begin
   i:=i+1;
   if (st[i] in ['0'..'9']) then
    begin
      m:=1;
      ch:=ch+st[i];
      while st[i+m] in ['0'..'9'] do
       begin
        ch:=ch+st[i+m];
        m:=m+1;
       end;
    b:=b+1;
    val(ch,c,code);
    a[b]:=c;
    delete(ch,1,length(ch));
   i:=i+m;
   end;
  end;
 for i:=1 to b-1 do
   for j:=i+1 to b do
    if (a[i]>a[j]) then
     begin
     t:=a[i];
     a[i]:=a[j];
     a[j]:=t;
    end;
 for i:=1 to length(st) do
  if (st[i] in ['0'..'9']) then
   st[i]:=#32;
 while pos(#32#32,st)<>0 do delete(st,pos(#32#32,st),1);
 m:=0;
  while pos(#32,st)<>0 do
   begin
    m:=m+1;
    str(a[m],sr);
    insert(sr,st,pos(#32,st));
    delete(st,pos(#32,st),1);
   end;
  write(st);
 readln
 end.
Mấy ông text xem có được không.
Cái bài này lớp mấy vậy :)..
 
O

ochuotqb

ý tưởng của mình là xét đệ qui
procedure xuli(n);
cho chạy xâu : nếu là các chữ số liền nhau thì lưu vào một phần tử trong mảng;
mặt khác cho break for to do xâu, đệ qui tiếp tiếp xuli(i);
sau đó đổi xâu => số => sắp xếp
Mình chưa thử code các bạn code xem sao rồi post lên hocmai
Mình nghĩ ý tưởng của bạn đang còn thiếu. Sau khi sắp xếp thì phải đánh dấu vị trí các số có trong xâu rồi chèn vào.
 
H

hung1xpro96

Mã:
var a: array [0..255] of longint;
    st,ch,sr:string;
    b,i,m,j:byte;
    c,t:longint;
    code:integer;
 begin
  write('Nhap xau: ');
  readln(st);
i:=0;
while i<=length(st) do
  begin
   i:=i+1;
   if (st[i] in ['0'..'9']) then
    begin
      m:=1;
      ch:=ch+st[i];
      while st[i+m] in ['0'..'9'] do
       begin
        ch:=ch+st[i+m];
        m:=m+1;
       end;
    b:=b+1;
    val(ch,c,code);
    a[b]:=c;
    delete(ch,1,length(ch));
   i:=i+m;
   end;
  end;
 for i:=1 to b-1 do
   for j:=i+1 to b do
    if (a[i]>a[j]) then
     begin
     t:=a[i];
     a[i]:=a[j];
     a[j]:=t;
    end;
 for i:=1 to length(st) do
  if (st[i] in ['0'..'9']) then
   st[i]:=#32;
 while pos(#32#32,st)<>0 do delete(st,pos(#32#32,st),1);
 m:=0;
  while pos(#32,st)<>0 do
   begin
    m:=m+1;
    str(a[m],sr);
    insert(sr,st,pos(#32,st));
    delete(st,pos(#32,st),1);
   end;
  write(st);
 readln
 end.
Mấy ông text xem có được không.
Cái bài này lớp mấy vậy :)..
Lớp 11 bạn ạ mà bạn làm bài mình cảm ơn nhưng nó không đúng với yêu cầu là phải làm bài này bằng đệ qui + chương trình con bạn ạ
 
Q

quanghero100

mọi người test thử nha:D:D:D:D không rảnh post lên hôm nay mới rảnh
 
Last edited by a moderator:
Q

quanghero100

Mã:
uses crt;
var s:string;
    a:array[1..1000] of integer;
    d:integer;
procedure tim_so;
 var tg,k,vt,i,n,j:integer;
     st:string;
begin
 d:=0; i:=1;
 while i<=length(s) do
  begin
   k:=0;
   if s[i] in ['0'..'9'] then
    begin
     vt:=i;
     while s[vt+k] in ['0'..'9'] do
      inc(k);
       st:=copy(s,vt,k);
        delete(s,vt,k);
         insert(#32,s,vt);
        val(st,n,j);
       inc(d);
      a[d]:=n;
    end;
    inc(i);
  end;
  for i:=1 to d-1 do
   for j:=i+1 to d do
    if a[i]>a[j] then
     begin
      tg:=a[i];
      a[i]:=a[j];
      a[j]:=tg;
     end;
end;
procedure chen;
var i,vt,n:integer;
    st:string;
begin
 i:=0;
 while pos(#32,s)<>0 do
  begin
  vt:=pos(#32,s);
  delete(s,vt,1);
  inc(i);
   str(a[i],st);
  insert(st,s,vt);
  end;
 writeln(s);
end;
begin
 clrscr;
  write('nhap chuoi: '); readln(s);
  while s[1]=#32 do delete(s,1,1);
  while s[length(s)]=#32 do delete(s,length(s),1);
  while pos(#32,s)<>0 do delete(s,pos(#32,s),1);
  tim_so; chen;
 readln;
 end.
 
Top Bottom