tháng 12 2021

Thời xa xưa, ở một bộ tộc cổ đại giữ tập tục đặt tên cho những đứa trẻ mới sinh ra theo tên Thiêng của gia đình với hy vọng chúng được thần linh phù hộ, hạnh phúc, khoẻ mạnh và có thể chống lại các thế lực đen tối, ma quỹ cung quanh. Mỗi gia đình có một tên thiêng riêng do Tộc trưởng đặt cho và từ tên Thiêng đó mà đặt tên cho các thành viên khác trong gia đình theo cách như sau:

            - Tên các thành viên trong gia đình phải là một xâu con gồm một hay nhiều ký tự liên tiếp nhau của tên Thiêng (tên của các thành viên không được trùng nhau và không trùng với tên Thiêng).

            Ví dụ: tên Thiêng là: “alubala” thì các tên có thể đặt là “a”, “alu”, “luba”, “bala”, “ala”,…. (các tên không được phép đặt là “aba”, “ula”, “lula”,…).

            Yêu cầu: Tộc trưởng muốn biết dựa vào số tên có thể đặt, mỗi gia đình có thể đặt được tối đa bao nhiêu tên.

            - Dữ liệu vào: File văn bản tenthieng.inp gồm một dòng chứa tên thiêng, trong đó chỉ chứa chữ cái Latinh thường, có độ dài không quá 255 ký tự.

            - Dữ liệu ra: File văn bản tenthieng.out chứa một số nguyên là số lượng các tên có thể đặt khác nhau.

Ví dụ:

tenthieng.inp

tenthieng.out

alubala

23


CODE THAM KHẢO:
program Ten_thieng;
uses crt;
var st, st1, st2: string;
    i,j,d,dem: byte;
    f: text;
    kt: boolean;
begin
    assign(f,'tenthieng.inp'); reset(f);
    read(f,st);
    close(f);
    assign(f,'tenthieng.out'); rewrite(f);
    for i:=1 to length(st)-1 do
        for j:=1 to length(st)-i+1 do
            begin
                st1:=copy(st,j,i);
                kt:=true;
                for d:=1 to j-1 do
                    begin
                        st2:=copy(st,d,i);
                        if st1=st2 then kt:=false;
                    end;
                if kt then inc(dem);
            end;
    write(f,dem);
    close(f);
end.


Phòng giáo dục quản lý học sinh các cấp học: Mầm non, Tiểu học, THCS. Số học sinh có độ tuổi từ 3 đến 15 tuổi. Để phục vụ cho việc báo cáo, phòng giáo dục cần thống kê số học sinh theo từng độ tuổi.

            Yêu cầu: Hãy viết chương trình giúp phòng giáo dục thống kê số lượng học sinh theo từng độ tuổi.

            Dữ liệu: Cho file từ văn bản có tên INPUT.TXT có cấu trúc sau:

            - Dòng đầu ghi số N (N < 10000) là số lượng học sinh mà phòng giáo dục quản lý.

            - Dòng thứ 2 ghi N số tương ứng là số tuổi của N học sinh, mỗi số cách nhau ít nhất một khoảng trắng.

            Kết quả: Ghi ra file văn bản OUTPUT.TXT gồm nhiều dòng, mỗi dòng ghi 2 số: số thứ nhất là độ tuổi, số thứ hai là số lượng học sinh ở độ tuổi đó.

Ví dụ:

INPUT.TXT

OUTPUT.TXT

13

3 4 12 3 5 13 5 3 12 15 3 8 15

3 4

4 1

5 2

8 1

12 2

13 1

15 2


CODE THAM KHẢO:
var   a:array[1..1000000] of longint;
      n,i,j,k,d,tg: longint;
      kt:boolean;
      f:text;
begin
    assign(f,'input.txt'); reset(f);
    readln(f,n);
    for i:=1 to n do read(f,a[i]);
    close(f);
    assign(f,'ouput.txt'); rewrite(f);
    for i:=1 to n-1 do
    for j:=i+1 to n do
    if a[i] > a[j] then
    begin
        tg:=a[i];
        a[i]:=a[j];
        a[j]:=tg;
    end;
    for  i:=1 to n do
    begin
        kt:=true;
        for j:=1 to i-1 do if a[i]=a[j] then kt:=false;
        if kt then
        begin
            d:=0;
            for k:=1 to n do
            if a[i]=a[k] then d:=d+1;
            writeln(f,a[i],' ',d);
        end;
    end;
    close(f);
end.


Một khu vườn có dạng hình chữ nhật có chiều dài là D và chiều rộng là R (mét). Giả sử khu vườn được chia ra làm D*R ô vuông cạnh độ dài 1 mét. Trong một số ô vuông có trồng cây. Một xe cắt cỏ có dạng một hình vuông kích thước 3*3 (mét) đặt tại một vị trí nào đó trong khu vườn. Xe cắt cỏ có thể di chuyển sang trái, sang phải, lên trên, xuống dưới 1 mét. Xe không thể di chuyển lên các ô có cây. Xe cắt cỏ sẽ dọn dẹp được những ô mà nó đi qua. Hãy xác định các ô mà xe cắt cỏ có thể dọn dẹp được.

            Dữ liệu vào file Catco.inp dòng đầu khi hai số nguyên dương D, R (5<=D, R<=100). Dòng thứ i trong số D dòng tiếp theo ghi R ký hiệu mô tả trạng thái của lưới ô vuông: ‘+’ cho biết vị trí cây, ‘.’ Cho biết ô vuông rỗng. ‘M’ cho biết tâ, của vị trí xe cắt cỏ. Các ký hiệu được ghi cách nhau một dấu cách.

            Kết quả ra file Catco.out: Ghi ra số ô có được cắt.


CODE THAM KHẢO:
var f:text;
    a,b:array[0..101,0..101] of char;
    x,y,i,j,n,m:byte;
    ans:integer;
    c:char;
procedure Enter;
begin
    assign(f,'catco.inp');
    reset(f);
    readln(f,n,m);
    for i:=1 to n do
    begin
    for j:=1 to m do
    begin
        if j<m then read(f,a[i,j],c)  //c để đọc khoảng trắng
        else read(f,a[i,j]);
        if a[i,j]='M' then   //Đánh dấu ô M
        begin
            x:=i;
            y:=j;
        end;
    end;
    readln(f);
    end;
    close(f);
end;
procedure Init;
begin
    for i:=1 to m do    //Tạo viền giới hạn Trên - Dưới
    begin
        a[0,i]:='+';
        a[n+1,i]:='+';
    end;
    for i:=1 to n do   //Tạo viền giới hạn Trái - Phải
    begin
        a[i,0]:='+';
        a[i,m+1]:='+';
    end;

    b:=a;
    for i:=x-1 to x+1 do
    for j:=y-1 to y+1 do a[i,j]:='O';    //Khởi tạo ô cỏ 3x3 vị trí ban đầu
end;
procedure Mark1(u,v:byte);
begin
    a[u,v]:='O';
    a[u,v-1]:='O';
    a[u,v+1]:='O';
end;
procedure Mark2(u,v:byte);
begin
    a[u,v]:='O';
    a[u-1,v]:='O';
    a[u+1,v]:='O';
end;
procedure Solve(u,v:byte);
begin
    //Đi lên
    if (u+2<=n+1) then
    if (a[u+2,v]<>'+') and (a[u+2,v-1]<>'+') and (a[u+2,v+1]<>'+') and (((a[u+2,v]='.') or (a[u+2,v-1]='.') or (a[u+2,v+1]='.'))) then
    begin
        Mark1(u+2,v);    //Đánh dấu
        Solve(u+1,v);
    end;

    //Đi xuống
   if (u-2>=0) then
    if (a[u-2,v]<>'+') and (a[u-2,v-1]<>'+') and (a[u-2,v+1]<>'+') and ((a[u-2,v]='.') or (a[u-2,v-1]='.') or (a[u-2,v+1]='.')) then
    begin
        Mark1(u-2,v);    //Đánh dấu
        Solve(u-1,v);
    end;

    //Qua phải
    if (v+2<=m+1)then
    if (a[u,v+2]<>'+') and (a[u-1,v+2]<>'+') and (a[u+1,v+2]<>'+') and ((a[u,v+2]='.') or (a[u-1,v+2]='.') or (a[u+1,v+2]='.')) then
    begin
        Mark2(u,v+2);    //Đánh dấu
        Solve(u,v+1);
    end;

    //Qua trái
        if (v-2>=0) then
        if (a[u,v-2]<>'+') and (a[u-1,v-2]<>'+') and (a[u+1,v-2]<>'+') and ((a[u,v-2]='.') or (a[u-1,v-2]='.') or (a[u+1,v-2]='.')) then
    begin
        Mark2(u,v-2);    //Đánh dấu
        Solve(u,v-1);
    end;
end;
procedure Result;
begin
    for i:=1 to n do
    for j:=1 to m do
    if a[i,j]<>b[i,j] then inc(ans);   //Đếm những ô đã cắt cỏ
    write(f,ans-1);   //Không tính ô M
end;
begin
    Enter;
    assign(f,'catco.out'); rewrite(f);
    Init;
    Solve(x,y);
    Result;
    close(f)
end.


Một xâu kí tự co thể “nén” theo cách sau: Một xâu con gồm n>1 kí tự giống nhau, chẳng hạn gồm n kí tự “a” sẽ được ghi thành na. Ví dụ xâu ‘aaaabbcd’ sẽ được nén thành 4a2bcd. Hãy viết chương trình nén và giải nén. (Chú ý trong các xâu được nén phải không có chữ số).

            Dữ liệu vào: Cho trong tệp String,inp

            Kết quả: Ghi vào tệp String.out

String.inp

String.out

aaaabbcd

3a2b

4a2bcd

aaabb


CODE THAM KHẢO
program Nen_GiaiNen_xau;
const fi ='string.inp';
      fo ='string.out';
var f,g:text;
    s1, s2: string;
procedure doc;
begin
        assign(f,fi); reset(f);
        readln(f,s1);
        readln(f,s2);
        close(f);
end;
procedure Nen;
var s,kq:string; i,d:integer; ch:char;
begin
        d:=1; s1:=s1+#32; ch:=s1[1]; kq:='';
        for i:=2 to length(s1) do
        if s1[i] = s1[i-1] then inc(d)
        else
        begin
                str(d,s);
                if d<>1 then kq:=kq+s+ch else kq:=kq+ch;
                d:=1;
                ch:=s1[i];
        end;
        writeln(g,kq);
end;
procedure Giainen;
var kq,so:string; i,j,code,n: integer;
begin
        i:=1; kq:='';
        repeat
                so:='0';
                while s2[i] in ['1'..'9'] do
                begin
                        so:=so+s2[i];
                        inc(i);
                end;
                val(so,n,code);
                if n > 1 then
                        for j:=1 to n do kq:=kq+s2[i]
                else kq:=kq+s2[i];
                inc(i);
        until i > length(s2);
        writeln(g,kq);
end;
begin
        assign(g,fo); rewrite(g);
        doc;
        Nen;
        Giainen;
        close(g);
end.


        Lớp 9A có N học sinh (n<=50), mỗi bạn được gắn với một mã số bất kì. Trong buổi đồng diễn thể dục N bạn được xếp thành một hàng dọc theo thứ tự từ nhỏ đến lớn của mã số. Để đội hình toàn trường cân đối thầy giáo chuyển một bạn lớp khác vào vị trí trong hàng có mã số là K vào đội hình lớp 9A. Em hãy giúp thầy giáo xếp bạn có mã số K vào vị trí trong hàng sao cho không làm xáo trộn đội hình đã được sắp xếp mà vẫn đảm bảo nguyên tắc xếp hàng đã nói trên. Hãy viết chương trình thực hiện công việc đó.

            Dữ liệu vào: cho file text XEPHANG.INP có 2 dòng, trong đó:

            - Dòng đầu: ghi 2 số NK.

            - Dòng thứ hai ghi các mã số của mỗi học sinh viết cách nhau ít nhất một dấu cách.

            Kết quả ra: ghi ra file text XEPHANG.OUT gồm 2 dòng:

            - Dòng một: ghi vị trí xếp bạn mã số K vào hàng.

            - Dòng hai: hàng được xếp.

XEPHANG.INP

XEPHANG.OUT

7 3

2 4 5 7 8 9 12

2

2 3 4 5 7 8 9 12


CODE THAM KHẢO:
program xep_hang;
var a:array[1..50] of integer;
    f:text;
    i,n,k,l: integer;
begin
        assign(f,'xephang.inp'); reset(f);
        read(f,n,k);
        for i:=1 to n do read(f,a[i]);
        close(f);
        assign(f,'xephang.out'); rewrite(f);
        i:=1;
        while (k>a[i]) and (i<=n) do i:=i+1;
        for l:=n+1 downto i do
        a[l]:=a[l-1];
        a[i]:=k;
        writeln(f,i);
        for i:=1 to n+1 do write(f,a[i],' ');
        close(f);
end.



Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.
Javascript DisablePlease Enable Javascript To See All Widget