View Single Post
Old 03-04-2009, 11:53 PM   #13
Hồ sơ
johnceduy
Senior Member
 
johnceduy's Avatar
 
Tham gia ngày: Dec 2008
Cư ngụ: Lê Quý Đôn
Số bài viết: 115
Tiền: 25
Thanks: 54
Thanked 83 Times in 18 Posts
johnceduy is on a distinguished road
Tim Ðề: Bác nào có đề Tin học trẻ năm cũ post hộ em!

Đây là bài 2 của em, test cái VD thì đúng, nhưng sang chuỗi khác thì sai, chẳng hạn chuỗi 1432412 1 thi no lai ra 11124324
Mấy anh xem hộ em nhá, em thấy cái while có vấn đề thì phải Y.Y
Code:
Program bai2;
Uses crt;
Var a,i,m,n,h,k,kt:integer;
        s:string;
Procedure  nhap(var s:string);
 Begin
  Write('Nhap vao chuoi:');readln(s);
  end;
{***************************************}
Procedure dem(var s:string;var m,n,h,k,kt:integer);
Begin
m:=0;
n:=0;
h:=0;
k:=0;
 For i:=1 to length(s) do begin
  if s[i]='1' then m:=m+1;
  if s[i]='2' then n:=n+1;
  if s[i]='3' then h:=h+1;
  if s[i]='4' then k:=k+1;
  if s[i]=' ' then kt:=i;
 end;
  n:=m+n;
  h:=n+h;
  k:=h+k;
  end;
{*********************************************************}
Procedure doicho(var s:string;var kt:integer;i:integer);
 Begin
  s[kt]:=s[i];
  s[i]:=' ';
  kt:=i;
  end;
 {**********************************************************}
Begin
clrscr;
nhap(s);
dem(s,m,n,h,k,kt);
a:=length(s);
 While kt<>length(s) do begin
        If (kt>=1) and (kt<=m) then
        For i:=1 to a do
         if (s[i]='1') and (i>m) and (kt<=m) and (kt>=1) then
         begin
         doicho(s,kt,i);
         write(kt:5);
         end;
        {****************************}
        If (kt>m) and (kt<=n) then
         For i:=1 to a do
          if (s[i]='2') and ((i<=m) or ((i>n) and (i<=k))) and (kt>m) and(kt<=n) then
          begin
          doicho(s,kt,i);
          write(kt:5);
          end;
         {****************************}
         If (kt>n) and (kt<=h) then
         For i:=1 to a do
          if (s[i]='3') and ((i<=n) or ((i>h) and (i<=k))) and(kt>n)and (kt<=h)then
          Begin
          doicho(s,kt,i);
          write(kt:5);
          end;
         {*****************************}
         If (kt>h) and (kt<=k) then
         For i:=1 to a do
          if (s[i]='4') and (i<=h) and (kt>h)and (kt<=k) then
              begin
              doicho(s,kt,i);
              write(kt:5);
              end;
end;
writeln;
Write(s:5);
Readln;
end.
__________________
Nhớ, nhớ, nhớ quá đi!

johnceduy is offline   Trả Lời Với Trích Dẫn