SP Tin Ak39 DHSP TN 2004 - 2008

Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Diễn đàn lớp SP TinAK39 - ĐHSP Thái Nguyên


2 posters

    Nhờ các cao thủ lớp mình đưa ra thuật toán bài này?

    Le Xuan Nguu
    Le Xuan Nguu
    Tín đồ của diễn đàn


    Tổng số bài gửi : 195
    Age : 38
    Đến từ : Ninh Binh
    Registration date : 21/05/2008

    Nhờ các cao thủ lớp mình đưa ra thuật toán bài này? Empty Nhờ các cao thủ lớp mình đưa ra thuật toán bài này?

    Bài gửi by Le Xuan Nguu Mon Feb 27, 2012 12:20 am

    Bài 1. Ghép số Tên chương trình: GHEP.PAS
    Cho hai số tự nhiên A có N chữ số và B có M chữ số 2=<N<100,2=<M<100. Xét các số nguyên dương có các tính chất sau:
    - Có N + M chữ số.
    - Có thể đánh dấu N chữ số trong C để các chữ số được đánh dấu (giữ nguyên trình tự xuất hiện trong C) tạo thành A và các chữ số không được đánh dấu (giữ nguyên trình tự) tạo thành B.
    Yêu cầu: Hãy tìm số lớn nhất Cmax và số nhỏ nhất Cmin thoả mãn các điều kiện trên.
    Dữ liệu vào: Từ file GHEP.INP, gồm 2 dòng:
    - Dòng đầu chứa số nguyên A.
    - Dòng thứ 2 chứa số nguyên B.
    Kết quả: Đưa ra file GHEP.OUT 2 dòng:
    - Dòng đầu: chứa số nhỏ nhất Cmin tìm được
    - Dòng thứ 2: chứa số lớn nhất Cmax tìm được
    Ví dụ:
    GHEP.INP
    20
    4181
    GHEP.OUT
    204181
    421810
    duong2uang
    duong2uang
    Admin


    Tổng số bài gửi : 353
    Age : 37
    Đến từ : Thanh Hoá
    Registration date : 16/04/2008

    Nhờ các cao thủ lớp mình đưa ra thuật toán bài này? Empty Re: Nhờ các cao thủ lớp mình đưa ra thuật toán bài này?

    Bài gửi by duong2uang Mon Feb 27, 2012 11:03 pm

    function tim_min:
    ____Lần lượt lấy các chữ số nhỏ ở hai đầu A và B ghép lại thành C.
    function tim_max:
    ____Lần lượt lấy các chữ số lớn ở hai đầu A và B ghép lại thành C.

    Kết quả:
    ____Min: tim_min(a,b) và tim_min(b,a). Cái nào nhỏ thì lấy.
    ____Max: tim_max(a,b) và tim_max(b,a). Cái nào lớn thì lấy.

    Chưa chứng minh được tính đúng đắn nên không kiểm chứng được tính đúng của chương trình Laughing
    Có gì bà con góp ý thêm nhé!

    Mã nguồn:
    Code:

    //tron hai xau sao cho khong thay doi trinh tu

    function tim_min (a, b : string): string;
       var
          csa, csb : byte; //vi tri phan tu trong a, b
          c : string; //xau ket qua
       begin
          csa := 1;
          csb := 1;
          c := ''; //c la xau rong
          while (csa<=length(a)) and (csb<=length(b)) do
          begin
             if a[csa]<b[csb] then //neu ki tu ben A nho hon
             begin
                c := c + a[csa];
                inc(csa);
             end
             else
             begin
                c := c + b[csb];
                inc(csb);
             end;
          end;
          if csa<=length(a) then //neu xau A con ki tu
             c := c + copy(a, csa, length(a)-csa+1)
          else //xau B con ki tu
             c := c + copy(b, csb, length(b)-csb+1);
          exit(c);
       end;
       
    function tim_max (a, b : string): string;
       var
          csa, csb : byte; //vi tri phan tu trong a, b
          c : string; //xau ket qua
       begin
          csa := 1;
          csb := 1;
          c := ''; //c la xau rong
          while (csa<=length(a)) and (csb<=length(b)) do
          begin
             if a[csa]>b[csb] then //neu ki tu ben A lon hon
             begin
                c := c + a[csa];
                inc(csa);
             end
             else
             begin
                c := c + b[csb];
                inc(csb);
             end;
          end;
          if csa<=length(a) then
             c := c + copy(a, csa, length(a)-csa+1)
          else
             c := c + copy(b, csb, length(b)-csb+1);
          exit(c);
       end;

    procedure xu_li;
       var
          a, b : string;
          x : string;
       begin
          readln(a);
          readln(b);
          x := tim_min(a, b);
          if x>tim_min(b, a) then x := tim_min(b, a);
          writeln(x);
          x := tim_max(a, b);
          if x<tim_max(b, a) then x := tim_max(b, a);
          write(x);
       end;
       
    BEGIN
       assign(input, 'ghep.inp');
       reset(input);
       assign(output, 'ghep.out');
       rewrite(output);
       xu_li;
       close(input);
       close(output);
    END.
    Le Xuan Nguu
    Le Xuan Nguu
    Tín đồ của diễn đàn


    Tổng số bài gửi : 195
    Age : 38
    Đến từ : Ninh Binh
    Registration date : 21/05/2008

    Nhờ các cao thủ lớp mình đưa ra thuật toán bài này? Empty Re: Nhờ các cao thủ lớp mình đưa ra thuật toán bài này?

    Bài gửi by Le Xuan Nguu Wed Feb 29, 2012 12:30 pm

    Thanks Quảng!
    OK bài này xong! Chuẩn.

    Sponsored content


    Nhờ các cao thủ lớp mình đưa ra thuật toán bài này? Empty Re: Nhờ các cao thủ lớp mình đưa ra thuật toán bài này?

    Bài gửi by Sponsored content


      Hôm nay: Sun May 19, 2024 12:25 pm