This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

Thứ Hai, 25 tháng 11, 2019

Bài tập nhập xuất file 1

******************************************************
Gửi bài làm về địa chỉ:
tinhocngoquyen@hotmail.com
*****************************************************

Bài 1: (tanxuat.pas) 

Nhập dãy a gồm n số nguyên
hãy đếm số lần xuất hiện của các phần tử trong dãy:
input: vào từ file tanxuat.inp gồm
-Dòng đầu: chứa số nguyên n (0<n<=1000000)
-Dòng sau: Chứa n số nguyên trong dãy. Các số cách nhau 1 kí tự trắng (0<ai<10000000)
output: Xuất ra file tanxuat.out gồm
-Nhiều dòng mỗi dòng in ra số lần xuất hiện của các phần tử trong dãy. Xem ví dụ để biết cách in
ví dụ:


input
output
8
9 5 9 5 2 5 8 1
1 xua hien 1
2 xuat hien 1
5 xuat hien 3
8 xuat hien 1
9 xuat hien 2

#: Số phần tử khác nhau

Bài 2: chensapxep.pas
Cho dãy a gồm n số nguyên đã được sắp xếp tăng dần. Nhập số nguyên x. Hãy chèn x vào dãy a sao cho dãy a không thay đổi thứ tự đã sắp xếp
input: vào từ file chensapxep.inp gồm
-Dòng đầu: chứa số nguyên n và x (0<n<=1000000)
-Dòng sau: Chứa n số nguyên trong dãy. Các số cách nhau 1 kí tự trắng (0<x, ai<10000000)
output: Xuất ra file chensapxep.out gồm
-Dòng đầu: in dòng chữ: day sau khi chen:
-Dòng sau: là dãy sau khi đã chèn x vào. Xem ví dụ để biết cách in
ví dụ:


input
output
7 12
10 17 18 100 200 300 339
day sau khi chen:
10 12 17 18 100 200 300 339

Bài 3( Đề thi Hsg CM-2018-2019)Con số may mắn (mayman.pas)



Trường THCS XYZ tổ chức giải bóng đá mini mừng Đảng, mừng Xuân 2019. Các lớp trong trường rất hào hứng tham gia giải nên giải bóng đá mini của trường đã thành công tốt đẹp. Tại buổi lễ trao giải có N cầu thủ tham dự, ngoài giải thưởng dành cho các cá nhân và tập thể lớp thì ban tổ chức có tổ chức tặng quà Tết cho các cầu thủ có “số may mắn”. Đầu tiên ban tổ chức yêu cầu các cầu thủ tự tìm cho mình một số cuối cùng dựa trên số áo của mình đang mặc (số cuối cùng được xác định là tổng các chữ số của số đó, sau đó lại tính tổng các chữ số của số mới tạo được cho đến khi chỉ còn một chữ số duy nhất). Sau đó ban tổ chức đưa ra một số nguyên M gọi là số may mắn, cầu thủ có cuối cùng trùng với số may mắn mà ban tổ chức đưa ra sẽ nhận được quà.
Ví dụ: Số áo cầu thủ là 79 thì số cuối cùng được tạo ra là 7 (79 ® 16 ® 7).
Yêu cầu: Viết chương trình đếm số cầu thủ nhận được quà may mắn của ban tổ chức.
Input: Được nhập vào từ file mayman.inp gồm
-Dòng 1: ghi số nguyên dương N là số lượng cầu thủ tham dự (0<N<=500) và số nguyên dương M là số may mắn mà ban tổ chức đưa ra (0<M<10). Hai số cách nhau một kí tự trắng
-N dòng sau mỗi dòng ghi một số nguyên dương tương ứng với số áo của cầu thủ (Mỗi số không vượt quá 10000)
Output: Ghi vào file mayman.out gồm 1 dòng ghi số lượng cầu thủ nhận được quà.
Ví dụ:

mayman.inp
mayman.out
Giải thích
7 3
2
3
8
12
30
18
3
4
Có 7  cầu thủ tham dự, con số may mắn là số 3 nên các cầu thủ mang số áo 3, 12, 30 được quà và số lượng cầu thủ nhận được quà là 4.
 (Do có nhiều đội tham dự nên có thể trùng lặp số áo giữa các cầu thủ tham dự)

Bài 4:Tính toán cơ bản (tinhtoan.pas)
   Cho hai số nguyên và phép tính cần thực hiện. Hãy viết chương trình tính và in ra kết quả của phép tính tương ứng giữa hai số đó
             Nếu là “+” in kết quả là tổng
             Nếu là “-” in kết quả là hiệu
             Nếu là “*” in kết quả là tích
             Nếu là “/” in kết quả là thương
   Dữ liệu vào từ file tinhtoan.inp gồm hai dòng:
             -Dòng 1 ghi hai số nguyên, mỗi số cách nhau một khoảng trắng (giá trị mỗi số <=106)
             -Dòng 2 ghi phép tính cần thực hiện là + hoặc – hoặc * hoặc  /
   Dữ liệu xuất ghi ra file tinhtoan.out gồm: một dòng ghi kết quả phép tính (nếu là phép chia kết quả làm tròn lấy 2 chữ số thập phân)
tinhtoan.inp
tinhtoan.out
8  12
+
20

339  9
/
37.67







   Bài 5:   Xếp gạch XEPGACH (xepgach.pas)

Minh rất thích trò chơi xếp các chiếc hộp có hình viên gạch. Minh đặt các viên gạch chồng lên nhau và xây thành nhiều chồng có độ cao khác nhau. Minh khoe với chị rằng “Chị trông, em đã xây được một bức tường”. Chị Minh trả lời: “Em phải xếp các viên gạch có độ cao giống nhau mới được gọi là một bức tường”. Sau khi nghe chị nó như vậy, nó cân nhắc một tí và cho rằng ý kiến đó là đúng. Vì vậy em bắt đầu tiến hành sắp xếp lại các chồng gạch lần lượt từng chiếc một cho đến khi hoàn thành công việc. Khi công việc đã hoàn tất. Minh mệt lả và muốn có bạn nào giúp Minh di chuyển các viên gạch với số lần ít nhất.
Yêu cầu: đưa ra số lần di chuyển ít nhất của các viên gạch sao cho từ các chồng gạch có độ cao khác nhau trở thành các chồng gạch có độ cao bằng nhau; lần lượt từng viên một cho đến khi hoàn thành công việc.
Dữ liệu vào: xepgach.inp
·       Dòng đầu tiên là số chồng gạch n (1≤ n ≤ 50)
·       Dòng tiếp theo lần lượt là các số nguyên hi, độ cao của chồng gạch thứ i. (1≤ hi ≤ 100, i = 1 .. n).
Dữ liệu ra: xepgach.out
Một số nguyên dương duy nhất là số lần di chuyển các viên gạch ít nhất. Nếu không thể xếp được thì ghi -1
Ví dụ
Input
Output
Giải thích
6
5 2 4 1 7 5
5


Bài 6: Đếm số 0 (so0.pas)



Cho trước 2 số nguyên mn. Hãy đếm số lượng số 0 có trong dãy số nguyên bắt đầu từ m cho đến  n.
Dữ liệu vào: so0.inp gồm 1 dòng chứa 2 số nguyên m và nm ≤ n ≤ 106
Dữ liệu ra: so0.out gồm 1 dòng chứa số lượng số 0 tìm được.
Ví dụ:
Input
Output
100  103
5

Giải thích: 100,101,102,103 có tất cả 5 số 0


Bài 8: SỐ TRÂU (sotrau.pas)
x con trâu, y bó cỏ
Trâu đứng ăn năm, Trâu nằm ăn ba, lụ khụ Trâu già ba con một bó
. Hỏi số Trâu mỗi loại
Dữ liệu vào: sotrau.inp gồm 1 dòng chứa 2 số nguyên x và y(0< x ,y ≤ 106
Dữ liệu ra: sotrau.out ghi 3 số nguyên lần lượt là Trâu đứng, trâu nằm, trâu già. Nếu có nhiều đáp án thì mỗi đáp án trên một dòng, nếu không có nghiệm ghi -1
Ví dụ:
Input
Output
100  100
4, 18 78
8 11 81
12 4 84







Bài 9:Tổng bé nhất SUMMIN

Cho dãy số nguyên a = (a1, a2, ... , an)
Yêu cầu tìm 2 số nguyên liên tiếp trong dãy a: ap, ap+1 có giá trị tuyệt đối của tổng là bé nhất.
Dữ liệu vào: gồm 2 dòng summin.inp
         Dòng 1: Chứa số nguyên N (2 ≤ n ≤ 10000)
         Dòng 2: Chứa n số a1, a2, ... , an  theo đúng thứ tự cách nhau một dấu cách (|ai| ≤ 10000).
Dữ liệu ra: summin.out
         Dòng 1: Ghi tổng tìm được
         Dòng 2: Ghi hai vị trí p và p+1 nhỏ nhất.
ví dụ:

Input
Output
5
2 3 9 -2 3
1
4 5




Bài 10: Ngựa truyền tin HORSE.PAS

Tin tức tình báo thu được cho thấy quân địch sắp mở cuộc tấn công quy mô. Trạm tiền đồn biên giới cử người phóng ngựa về thủ đô báo cáo tình hình và xin tiếp viện. Giữa tram tiền đồn và thủ đô có bố trí N trạm, các trạm ngựa cách đều nhau, ở đó lính cờ (người cầm cờ hiệu đưa tin) có quyền trao đổi ngựa mới trong trạm. Ngựa của trạm i có thể phi tới trạm kế tiếp sau thời gian T[i] giờ. Mỗi con ngựa đều đủ khỏe để có thể đi một mạch tới tận thủ đô.
Yêu cầu: Hãy xác địn khoảng thời gian ngắn nhất tin tức tình báo được đưa về tới thủ đô.
Dữ liệu vào horse.inp
- Dòng đầu là số nguyên N (N ≤ 106)
- Dòng 2 là n số nguyên T[i].
Dữ liệu ra: horse.out gồm 1 dòng duy nhất là giá trị cần tìm

Input
Output
5
2 4 3 1 5
7

Bài 11:Lỗ hổng chữ số LOHONG
Lớp của Bờm tuy không phải là lớp chuyên nhưng phong trào học Toán – Tin rất sôi động. Thầy giáo của Bờm rất tâm huyết, luôn tìm các bài toán hay, mới, lạ, đặc biệt là bài toán quy luật để dạy trò. Một hôm, thầy giáo đến lớp thật sớm trước tiết toán, viết lên bảng một dãy có quy luật sau:
42 à 1,  1337 à 0, 669 à 3, 1882 à 4, 688 à 5, 12345 à 1, 123 à 0, 456 à 2, 789 à 3. Và thầy đố cả lớp rằng: 45678 à ?
Bằng một cái đầu rất nhạy bén Toán Tin, nhất là những bài toán Tin logic, Bờm đã kiếm được lời giải trên … Google ngay khi về đến nhà. Chật vật một hồi, cậu đã tìm ra quy luật của bài toán: chuyển số “lỗ hổng” trong các chữ số của số đã cho và biểu diễn chúng (không có chữ số 0 ở đầu). Chữ số 1, 2, 3, 5 và 7 không có lỗ hổng nào; các chữ số 0, 4, 6, 9 có một “lỗ hổng” và đặc biệt chữ số 8 có đến 2 lỗ hổng. Hôm sau Bờm rất tự tin mở rộng bài toán bằng cách thêm vào một vài số nữa đến đố bạn các lớp bên cạnh. Bạn đọc hãy giúp các bạn ấy giải bài này để Bờm không được dịp “kiêu” nhé.
Dữ liệu vào : -gồm một số nguyên duy nhất n (1 <= n <=1000000)
Dữ liệu ra: In ra màn hình một số nguyên duy nhất là số lỗ hổng của số đã cho


Ví dụ:`

Input
Output
42
1
669
3
456
2
45678
4







Bài 12: Xe điện TRAM

Nước Anh có đúng một đường xe điện. Có n trạm dừng, đánh số từ 1 đến n theo thứ tự di chuyển của xe. Tại trạm thứ iai hành khách xuống xe, sau đó có bi hành khách lên xe. Xe không có ai trước khi nó đến trạm đầu tiên và khi đến trạm cuối cùng tất cả các hành khách đều xuống xe.
Nhiệm vụ của bạn là tính sức chứa tối thiểu của xe để bất cứ thời điểm nào số lượng người bên trong xe không bao giờ vượt quá sức chứa này. Lưu ý rằng ở mỗi trạm dừng tất cả các hành khách trên xe xuống trước rồi các hành khách ở dưới mới lên xe.
Input
·       Dòng đầu tiên chứa một số duy nhất n  - số lượng các trạm dừng của xe điện. (2 ≤ n ≤ 1000)
·       n dòng tiếp theo, mỗi có chứa hai số nguyên aibi (0 ≤ ai, bi ≤ 1000) - số lượng hành khách xuống xe và lên xe tại trạm thứ i.
Theo đề bài ta có a1 = bn = 0. (Trạm đầu không ai xuống, trạm cuối không ai lên  nữa)
Output: In một số nguyên duy nhất biểu thị sức chứa tối thiểu của xe điện.
ví dụ:
Input
Output
4
0 3
2 5
4 2
4 0
6












Bài 13:
Lớp chuyên Tin học  đi tham quan du lịch ở núi  Sơn Tinh. Trong lớp có n học sinh, các học sinh được đánh số thứ tự từ 1 đến n.  Cả lớp quyết định lên đỉnh núi bằng cáp treo nhưng cabin cáp treo chỉ cho phép ngồi tối đa 2 người và tổng cân nặng không vượt quá m. Hỏi có bao nhiêu cách xếp hai học sinh khác nhau vào cabin cáp treo
Input: capin.inp gồm:
Dòng đầu: số nguyên n và m (0<n<500, 0<m<=120)
Dòng sau: là cân nặng của n học sinh trong lớp. số thứ i là cân nặng của bạn thứ i và mỗi số không vượt quá 100
Output: capin.out
-ghi số nguyên là số cách xếp
Ví dụ

input
output
Giải thích
5 100
50 39 75 54  60
3
Có thể xếp bạn 1+2, 2+4, 2+5.


Thứ Sáu, 22 tháng 11, 2019

Nhập xuất file


Làm bài tập Pascal theo định dạng đề thi
(nhập dữ liệu từ file và xuất kết quả ra file)
Ví dụ 1: Cho hình chữ nhật có chiều dài là a và chiều rộng là b
Yêu cầu: Hãy tính diện tích và chu vi hình chữ nhật
Input: vào từ file chunhat.inp gồm 1 dòng ghi lần lượt hai số nguyên a và b (0<b<a<200). Mỗi số cách nhau 1 kí tự trắng
Output: ghi ra file chunhat.out gồm
-dòng 1: Ghi diện tích
-dòng 2: Ghi chu vi
Ví dụ:
chunhat.inp
chunhat.out
9 3
27
24


Chương trình mẫu:


Chú ý đến những điểm mới đánh dấu bằng hình chữ nhật màu đỏ


Ví dụ 2:
Cho một dãy A gồm N số nguyên a1, a2, …, aN, mỗi số có giá trị tuyệt đối không vượt quá 1000000.

Yêu cầu: Hãy sắp xếp dãy trên thành một dãy tăng
Input: Nhập vào từ file dayso.inp
  • Dòng đầu tiên chứa số nguyên dương N (0<n<=10000).
  • N dòng sau: Dòng thứ i chứa số ai.
Output: Ghi ra file dayso.out
  • Dòng đầu tiên ghi: Day sau khi da sap xep:
  • Dòng sau: Ghi dãy A đã được sắp xếp tăng. (mỗi số cách nhau 1 kí tự trắng)
Ví dụ:
dayso.inp
dayso.out
7
9
-1
 6
7
3
2
9
Day sau khi da sap xep:
-1 2 3 6 7 9 9

Chương trình mẫu:


Chú ý khi nhập xuất file:
-tên file nhập, xuất phải giống như yêu cầu của đề (box.inp khác với boxs.inp)
-thông tin xuất ra file cũng phải giống hệt 100% như yêu cầu của đề (in cái gì trước, cái gì sau, viết thường, viết hoa, dấu, khoảng cách, xuống hàng,…)

Thứ Tư, 20 tháng 11, 2019

Thuật toán sắp xếp


Thuật toán sắp xếp nổi bọt (hubble sort)
Giả sử dãy a cần sắp xếp có n phần tử (a1èan) theo thứ tự tăng. 
+Sắp xếp từ trên xuống
Khi tiến hành từ trên xuống, ta so sánh hai phần tử đầu, nếu phần tử đứng trước lớn hơn phần tử đứng sau thì đổi chỗ chúng cho nhau. Tiếp tục làm như vậy với cặp phần tử thứ hai và thứ ba và tiếp tục cho đến cuối tập hợp dữ liệu, nghĩa là so sánh (và đổi chỗ nếu cần) phần tử thứ n-1 với phần tử thứ n. Sau bước này phần tử cuối cùng chính là phần tử lớn nhất của dãy.
Sau đó, quay lại so sánh (và đổi chố nếu cần) hai phần tử đầu cho đến khi gặp phần tử thứ n-2....
For i:=n down to 2 do
For j:=1 to i-1 do
if a[j] > a[j+1] then đổichỗ(a[j],a[j+1]) 

+Sắp xếp từ dưới lên
Sắp xếp từ dưới lên so sánh (và đổi chỗ nếu cần) bắt đầu từ việc so sánh cặp phần tử thứ n-1 và n. Tiếp theo là so sánh cặp phần tử thứ n-2 và n-1,... cho đến khi so sánh và đổi chỗ cặp phần tử thứ nhất và thứ hai. Sau bước này phần tử nhỏ nhất đã được nổi lên vị trí trên cùng (nó giống như hình ảnh của các "bọt" khí nhẹ hơn được nổi lên trên). Tiếp theo tiến hành với các phần tử từ thứ 2 đến thứ n.
For i:=2 to n do
For j:=n downto i do
if a[j]<a[j-1] then đổichỗ(a[i],a[j]);
+độ phức tạp của bài toán là O(n2).


Một cách cài đặt khác
For i:= 1 to n-1 do
          For j:= i+1 to n do
                  if (a[i] > a[j]) then
                  đổichỗ(a[i],a[j]);


Thuật toán sắp xếp nhanh (Quick Sort)

Procedure sxnhanh(l,r:integer);

Var i,j,x,tg:integer;

Begin

x:=a[(l+r) div 2];

  i:=l;j:=r;

  Repeat

    While(a[i]<x) do i:=i+1;

     While (x<a[j]) do j:=j-1;

      if i<=j then

        Begin

          tg:=a[i];a[i]:=a[j];a[j]:=tg;

          i:=i+1;j:=j-1;

        End;

 until i>j;

 if l<j then sxnhanh(l,j);

 if i<r then sxnhanh(i,r);

End;

Chú ý: Thuật toán sắp xếp nhanh phải tổ chức dưới dạng một thủ tục để gọi đệ quy