Thứ Ba, 9 tháng 7, 2019

Giải nén xâu GNEN

Đề thi tin học trẻ bảng C tỉnh Quảng Bình năm 2009
Trong máy tính, để tiết kiệm bộ nhớ, người ta thường tìm cách nén dữ liệu. Trong việc nén văn bản, ta sử dụng một phương pháp đơn giản được mô tả thông qua ví dụ sau:
Ví dụ:
· Với xâu ký tự:  ‘aaaabbb’ sẽ được nén lại thành xâu ‘4a3b’.
· Với xâu ký tự ‘aaab’ sẽ được nén lại thành xâu ‘3ab’.
Cho một xâu ký tự St1 gồm các ký tự thuộc tập 'a'..'z'. Gọi St là xâu nén của xâu St1 theo phương pháp được mô tả như trên. Xâu St gồm N (1 ≤ N ≤ 255) ký tự thuộc tập các ký tự: 'a'..'z', '0'..'9'
Yêu cầu: Hãy giải nén xâu St để được xâu gốc St1.
Dữ liệu vào: xâu ký tự St.
Dữ liệu ra: Ghi xâu St1 là xâu sau khi đã được giải nén.
Ví dụ:
GNEN.INP GNEN.OUT
3a5bc                aaabbbbbc

12 nhận xét:

  1. program p;
    uses crt;
    var s,ss:string;
    i,j,a:integer;
    begin
    clrscr;
    readln(s); ss:='';
    for i:=1 to length(s) do
    if (s[i] in ['0'..'9']) and (ss='') then ss:=ss+s[i] else
    if(not(s[i] in ['0'..'9'])) and (ss<>'') then
    begin
    val(ss,a);
    for j:=1 to a do write(s[i]);
    ss:='';
    end;
    readln;
    end.

    Trả lờiXóa
  2. Uses crt;
    Var St,St1,x:string;
    i,j,k,l:longint;
    Begin
    readln(St);
    For i:=1 to length(St) do
    If (St[i] in ['a'..'z']) then If not (St[i-1] in ['0'..'9']) then Insert('1',St,i);
    For i:=1 to length(St) do
    Begin
    If St[i] in ['0'..'9'] then
    For j:=i+1 to length(St) do
    If St[j] in ['a'..'z'] then break;
    x:=copy(St,i,j-i);
    Val(x,k);
    For l:=1 to k do
    St1:=St1+St[j];
    end;
    Write(St1);
    readln;
    end.

    Trả lờiXóa
  3. program n;
    uses crt;
    var s,so,st1,ss:string;
    i,k,j:integer;
    begin
    clrscr;
    readln(s);
    for i:=1 to length(s) do
    begin
    if s[i] in ['0'..'9'] then
    begin
    so:=so+s[i];
    val(so,k);
    end;
    if not(s[i] in ['0'..'9']) then st1:=st1+s[i];
    if st1<>'' then
    begin
    for j:=1 to k do ss:=ss+st1;
    so:='';
    st1:='';
    k:=1;
    end;
    end;
    write(ss);
    readln;
    end.

    Trả lờiXóa
  4. uses crt;
    var f:text;
    s,so,st1,ss:string;
    n,i,k,j,code:integer;
    begin
    assign(f,'nen.inp');reset(f);
    readln(f,s);
    close(f);
    assign(f,'nen.out');rewrite(f);
    for i:=1 to length(s) do
    begin
    if s[i] in ['0'..'9'] then
    begin
    so:=so+s[i];
    val(so,k);
    end;
    if (s[i-1] in ['A'..'Z']) or (s[i-1] in['a'..'z']) then
    for j:=1 to k do ss:=ss+s[i-1];
    k:=1;
    so:='';
    st1:='';
    end;
    write(f,ss);
    close(f);
    end.

    Trả lờiXóa
    Trả lời
    1. cam ơn lời giải, bạn có thể giải nén xâu sau giúp mình không a1b5d15 thành abbbbbddddddddddddddd

      Xóa
  5. Program GiaiNen;
    cONST FI='Bai4.inp';
    fo='Bai4.out';
    var s:string;
    Procedure tach(x:string);
    var p,c:longint;
    f,u:qword;
    r:string;
    begin
    if length(x)=0 then exit;
    for p:=1 to length(x) do
    begin
    if (x[p] in ['A'..'Z']) then begin
    write(x[p]); delete(x,p,1); break;
    end else
    if (x[p] in ['0'..'9']) and (x[p+1] in ['A'..'Z']) then
    begin
    r:=copy(x,1,p); if length(r)>17 then begin
    f:=0;
    while f<100000000000000000 do begin
    write(x[p+1]);
    f:=f+1;
    end;
    end else
    begin
    val(r,u); f:=0;
    while f<u do begin
    write(x[p+1]);
    f:=f+1;
    end;
    end;
    delete(x,1,length(r)+1); break;
    end;
    end; tach(x);
    end;
    BEGIN
    assign(input,fi); reset(input);
    assign(output,fo); rewrite(output);
    read(s); tach(s);
    close(input); close(output);
    END.



    Trả lờiXóa
  6. uses crt;
    var st,r:string;a,i,t:integer;
    begin
    clrscr;
    write('nhap xau st: ');readln(st);
    r:='';
    a:=0;
    for i:=1 to length(st) do
    if st[i] in ['0'..'9'] then
    begin
    val(st[i],a);
    for t:=1 to a do
    write(st[i+1]);
    end
    else
    if (i=1) or (st[i-1] in ['a'..'z']) then write(st[i]);
    readln
    end.

    Trả lờiXóa

Dùng nick gmail để bình luận. Nếu lần đầu tiên bạn làm điều này thì hệ thống sẽ chuyển bạn sang trang blogger và hỏi bạn chọn tên hiển thị là gì. Bạn hãy nhập tên hiển thị rồi ok là được. Những lần bình luận sau hệ thống sẽ không hỏi nữa. Cảm ơn!

Bài được xem nhiều nhất