Tìm kiếm theo tiêu đề

Tin tức cộng đồng

[MỜI HỢP TÁC] Các kỳ thi Olympic Quốc tế 2026 (IMO - IEO - ISO)

Kính gửi Quý Lãnh đạo, Ban Giám hiệu và Quý Thầy/Cô, FermatTech (Đối tác Google tại VN) phối hợp cùng SCO Ấn Độ trân trọng kính mời tham gia 3 kỳ thi uy tín dành cho HS từ lớp 1 - 12: - IMO: Olympic Toán Quốc tế. - IEO: Olympic Tiếng Anh Quốc tế. - ISO: Olympic Khoa học...
Xem tiếp

Tin tức thư viện

Chức năng Dừng xem quảng cáo trên violet.vn

12087057 Kính chào các thầy, cô! Hiện tại, kinh phí duy trì hệ thống dựa chủ yếu vào việc đặt quảng cáo trên hệ thống. Tuy nhiên, đôi khi có gây một số trở ngại đối với thầy, cô khi truy cập. Vì vậy, để thuận tiện trong việc sử dụng thư viện hệ thống đã cung cấp chức năng...
Xem tiếp

Hỗ trợ kĩ thuật

  • (024) 62 930 536
  • 0919 124 899
  • hotro@violet.vn

Liên hệ quảng cáo

  • (024) 66 745 632
  • 096 181 2005
  • contact@bachkim.vn

CHUYÊN ĐỀ NÂNG CAO CHẤT LƯỢNG HỌC SINH GIỎI TIN 9

Wait
  • Begin_button
  • Prev_button
  • Play_button
  • Stop_button
  • Next_button
  • End_button
  • 0 / 0
  • Loading_status
Nhấn vào đây để tải về
Báo tài liệu có sai sót
Nhắn tin cho tác giả
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Hoàng Trọng Kỳ Anh
Ngày gửi: 13h:31' 11-10-2026
Dung lượng: 844.4 KB
Số lượt tải: 4
Số lượt thích: 0 người
UBND HUYỆN …
TRƯỜNG THCS …

CHUYÊN ĐỀ
NÂNG CAO CHẤT LƯỢNG BỒI DƯỠNG HSG
BỘ MÔN TIN HỌC
GVTH: ….

PHẦN I: LÍ DO THỰC HIỆN CHUYÊN ĐỀ
- Căn cứ vào nội dung cuộc họp chuyên môn đầu năm tại trường
THCS Phong Phú vào ngày 12 tháng 9 năm 2023.
- Dựa trên tình hình tham gia thi học sinh giỏi Tin học của các trường
trên địa bàn huyện Bình Chánh chưa nhiều
- Điểm số của các em học sinh khi tham gia thi học sinh giỏi cấp
huyện, cấp thành phố chưa cao.
- Giáo viên một số trường rất muốn tham gia công tác bồi dưỡng
học sinh giỏi nhưng chưa có kinh nghiệm nên ngại không tham gia.

VIDEO 1

PHẦN II: MỤC TIÊU CHUYÊN ĐỀ
- Tăng số lượng các trường tham gia bồi dưỡng học sinh giỏi Tin
học hàng năm.
- Tăng điểm số cho các em học sinh khi tham gia các cuộc thi học
sinh giỏi cấp huyện và cấp thành phố.
- Nâng cao chất lượng công tác bồi dưỡng học sinh giỏi ở các trường
THCS trên địa bàn huyện Bình Chánh.
- Hình thành đội ngũ giáo viên tham gia công tác bồi dưỡng học sinh
giỏi Tin học đoàn kết, chia sẽ cùng nâng cao chất lượng đào tạo học
sinh giỏi Tin học của huyện Bình Chánh.

PHẦN III: NỘI DUNG CHUYÊN ĐỀ
1. Công tác tạo nguồn học sinh tham gia học BDHSG Tin học.
2. Ngôn ngữ lập trình và phần mềm dùng để BDHSG Tin học.
3. NộI dung kiến thức cần triển khai khi BDHSG Tin học.
4. Cấu trúc đề thi HSG Tin học cấp huyện, cấp thành phố.
5. Giới thiệu, phân tích và giải đề thi cấp huyện năm 2022.
6. Một vài lưu ý khi tham gia công tác bồi dưỡng HSG Tin học.
7. Kết quả đạt được trong công tác BDHSG qua các năm.
8. Giới thiệu phần mềm chấm máy Themis.

1. CÔNG TÁC TẠO NGUỒN HỌC SINH HỌC HSG

 Phát hiện các em tích cực phát biểu trong giờ học.
 Phát hiện các em tích cực tham gia các hội thi trực tuyến.
 Phát hiện thông qua các hội thi khéo tay kỹ thuật.
 Phát hiện thông qua cuộc Tin học trẻ, Sáng tạo trẻ …

CÁC EM TÍCH CỰC PHÁT BIỂU TRONG GIỜ HỌC.

CÁC EM TÍCH CỰC THAM GIA HỘI THI TRỰC TUYẾN

VIDEO 2

THÔNG QUA HỘI THI KHÉO TAY KỸ THUẬT

THÔNG QUA HỘI THI TIN HỌC TRẺ

THÔNG QUA CÁC HỘI THI SÁNG TẠO TRẺ

2. NGÔN NGỮ LẬP TRÌNH VÀ PHẦN MỀM BDHSG
NGÔN NGỮ LẬP TRÌNH

PHẦN MỀM

PASCAL

FREE PASCAL 3.0

C/C++

DIV-C hay Code Blocks

Pythol

Pydev

VIDEO 3

3. NỘI DUNG KIẾN THỨC CẦN DẠY

Kiến thức
cơ bản

Kiến thức
nâng cao

KIẾN THỨC LẬP TRÌNH CƠ BẢN
 Các khai báo và nhập xuất trên tập tin.
 Câu lệnh có cấu trúc: If … else, vòng lặp với số lần biết trước, vòng lặp với số lần
chưa biết.
 Chương trình con.
 Kiểu dữ liệu mảng 1 chiều và các thao tác.
 Kiểu dữ liệu xâu ký tự và các thao tác.
 Kiểu dữ liệu mảng 2 chiều.

CÁCH KHAI BÁO BIẾN
Khai báo biến trong Pascal

Khai báo biến trong C/C++

Cú pháp chung:
var : kiểu dữ liệu;
Kiểu dữ liệu:
Kiểu số nguyên:
integer: -32768 đến 32767
longint: -214783647 đến
214783647
int64: -2^63 đến 2^63
Ví dụ:
var x: integer;

Cú pháp chung:
Kiểu dữ liệu ;
Kiểu dữ liệu:
Kiểu số nguyên:
int: 9 chữ số
long long: 18 chữ số.
Ví dụ:
int x;

CÁCH KHAI BÁO BIẾN
Khai báo biến trong Pascal

Khai báo biến trong C/C++

Cú pháp chung:
var : kiểu dữ liệu;
Kiểu dữ liệu:
Kiểu số thực:
real: 11 đến 12 chữ số
double: 15 đến 16 chữ số
Ví dụ:
var y: real;

Cú pháp chung:
Kiểu dữ liệu ;
Kiểu dữ liệu:
Kiểu số thực:
float: 1 đến 7 chữ số
double: 1 đến 15 chữ số
Ví dụ:
float y;

VIDEO 4

CÁCH KHAI BÁO BIẾN
Khai báo biến trong Pascal

Khai báo biến trong C/C++

Cú pháp chung:
var : kiểu dữ liệu;
Kiểu dữ liệu:
Kiểu logic:
boolean: cho kết quả true hay false
Ví dụ:
var k: boolean;

Cú pháp chung:
Kiểu dữ liệu ;
Kiểu dữ liệu:
Kiểu logic:
bool: cho kết quả true hay false
Ví dụ:
bool k;

CÁCH KHAI BÁO BIẾN
Khai báo biến trong Pascal

Khai báo biến trong C/C++

Cú pháp chung:
var : kiểu dữ liệu;
Kiểu dữ liệu:
Kiểu ký tự:
char: 1 ký tự trong bảng chữ cái.
Ví dụ:
var c: char;

Cú pháp chung:
Kiểu dữ liệu ;
Kiểu dữ liệu:
Kiểu ký tự:
char: 1 ký tự trong bảng chữ
cái.
Ví dụ:
char c;

CÁCH NHẬP XUẤT DỮ LIỆU
Nhập xuất trong Pascal

Nhập xuất trong C++

Nhập – xuất trên màn hình đen:
Nhập: read();
Xuất: write();
Ví dụ: read(a);
write(a);

Nhập – xuất trên màn hình đen:
Nhập: cin>>;
Xuất: cout<<;
Ví dụ: cin>>a;
cout<
NHẬP XUẤT TỪ TẬP TIN
Nhập xuất trong Pascal
Nhập từ file: khai báo biến file
var f1 : text;
assign(f1,'tep_tin.inp');
reset(f1);
read(f1, ten_bien);
close(f1);
Xuất từ file: khai báo biến file
var f2: text;
assign(f2,'tongchuso.out');
rewrite(f2);
write(f2, ten_bien);
close(f2);

Nhập xuất trong C++
Nhập
freopen(“tentaptin.inp”,”r”,stdin);
cin>>;
Xuất
freopen(“tentaptin.out”,”w”,stdout);
Cout<<;

VÍ DỤ: VIẾT CHƯƠNG TRÌNH ĐƠN GIẢN
Viết chương trình nhập vào 2 số nguyên a, b tính tổng 2 số đó.(Cong.cpp)
Dữ liệu vào: 2 số nguyên a, b (a, b <10^6)
Cong.inp Cong.out
Dữ liệu ra: một số nguyên là tổng của 2 số a và b.
45
9
uses crt;
var f1, f2:text;
var a,b : integer;
begin
assign(f1,'tong.inp');
reset(f1);
read(f1, a,b);
assign(f2,'tong.out');
rewrite(f2);
write(f2, a+b);
close(f1);
close(f2);
end.

#include
using namespace std;
int a, b;
int main()
{
freopen(“Cong.inp”,”r”,stdi
n);
freopen(“Cong.out”,”w”,st
dout);
cin>>a>>b;
cout<return 0;
}

CẤU TRÚC ĐIỀU KIỆN
Ngôn ngữ Pascal

Ngôn ngữ C++

Dạng thiếu: If <điều kiện> then lệnh>;
Dạng đủ: If <điều kiện> then
else ;
Dạng lồng nhau: If <điều kiện 1> then

Else if <điều kiện 2> then
Else if …
Else if <điều kiện n> then
Else ;

Dạng thiếu: if <điều kiện> ;
Dạng đủ: if <điều kiện> ; else
;
Dạng lồng nhau: if <điều kiện> 1>;
else if <điều kiện 2> ;
else if …
else if <điều kiện n> ;
else ;

VÍ DỤ: BÀI TOÁN CHIA TÁO
Bà mua cho hai anh em Việt và Nam n quả táo, bà muốn chia đều số táo cho hai anh em. Trong trường hợp n chẵn
thì hai anh em sẽ nhận được số táo bằng nhau, trong trường hợp ngược lại thì em Nam sẽ nhận số táo nhiều hơn
Việt 1 quả. Hãy cho biết số táo của Việt và Nam.
Chiatao.in Chiatao.ou
Input: một số nguyên n
p
t
Output: số táo của Việt và Nam
9
4 5 #include
uses crt;
8
4 4 using namespace std;
var f1, f2:text;
int n;
var n : integer;
int main()
begin
{
assign(f1,'chiatao.inp');
freopen("chiatao.inp", "r",
reset(f1); read(f1, n);
stdin);
assign(f2,'chiatao.out');
freopen("chiatao.out", "w",
rewrite(f2);
stdout);
if (n mod 2 = 0) then
cin>>n;
write(f2, n/2,' ',n/2);
if (n%2==0)
else
cout<write(f2,n/2,' ',n/2 + 1);
else
close(f1); close(f2);
cout<end.
return 0;
}

CẤU TRÚC LẶP
Ngôn ngữ Pascal
Lặp với số lần biết trước:
for := GTĐ to GTC do
;
Lặp với số lần chưa biết trước:
while <điều kiện lặp> do
;

Ngôn ngữ C++
Lặp với số lần biết trước:
for (= GTĐ; <=
GTC; ++)
;
Lặp với số lần chưa biết trước:
while <điều kiện lặp>
;

VÍ DỤ: BÀI TOÁN CHỮ CÁI
Cho trước chữ cái x và số nguyên n. Hãy in chữ cái đó n lần
INPUT: một dòng chứa chữ cái x và số nguyên n
OUTPUT: một dòng chứa n chữ cái x.
uses crt;
var f1, f2:text;
var n, i: integer;
var c: char;
begin
assign(f1, 'chucai.inp');
reset(f1); read(f1, n); read(f1, c);
assign(f2,'chucai.out');
rewrite(f2);
for i:=1 to n do
write(f2,c);
close(f1); close(f2);
end.

chucai.inp chucai.out
B4
BBBB

#include
using namespace std;
int n;
char c;
int main()
{
freopen("chucai.inp", "r", stdin);
freopen("chucai.out", "w", stdout);
cin>>c; cin>>n;
for(int i=1;i<=n;i++)
cout<return 0;
}

VÍ DỤ: BÀI TOÁN CHỮ SỐ
Cho số tự nhiên N. Đếm và tính tổng các chữ số của N.
INPUT: Số tự nhiên N (<=109)
OUTPUT: Đưa ra số lượng và tổng các chữ số của N
uses crt;
var f1, f2:text;
var n: integer;
begin
assign(f1,'CHUSO.inp');
reset(f1);
read(f1, n);
assign(f2,'CHUSO.out');
rewrite(f2);
var S, du, dem : integer;
S:=0;
dem:=0;

while (n<>0) do
begin
dem:=dem+1;
du:= n mod 10;
S:=S + du;
n:=n div 10;
end;
write(f2,dem,' ', S);
close(f1);
close(f2);
end.

CHUSO.i
np
4561

CHUSO.o
ut
4 16

#include
using namespace std;
int n;
int main ()
{
freopen ("CHUSO.inp", "r", stdin);
freopen ("CHUSO.out", "w",
stdout);
cin>>n;
int s=0, du, dem=0;

while (n!=0)
{
dem++;
du=n%10;
s=s+du;
n=n/10;
}
Cout<return 0;
}

CHƯƠNG TRÌNH CON
• Chương trình con trong lập trình có 2 loại: thủ tục và hàm.
• Thủ tục thường dùng để trả về một giá trị sau khi tính toán đoạn chương trình. Thủ tục
dùng để tính toán. Thủ tục thường được gọi trong biểu thức so sánh hoặc tính toán.
• Thủ tục thường được khai báo trên chương trình chính.

Ngôn ngữ Pascal
Thủ tục:
Function ten_thutuc(biến hình thức)
begin
Các lệnh;
Ten_thutuc:=gia tri;
end;

Ngôn ngữ C++
Thủ tục:
Kiểu dữ liệu ten_thutuc(biến hình thức)
{
Các lệnh;
return gia tri;
}

CHƯƠNG TRÌNH CON
• Hàm thì thực thi tất cả các lệnh trong đoạn chương trình đó. Hàm dùng để thực hiện
nhập, xuất, sắp xếp, đổi chỗ, …
• Hàm thường được khai báo trên chương trình chính.

Ngôn ngữ Pascal
Hàm:
procedure ten_ham(biến hình thức)
begin
Các lệnh;
end;

Ngôn ngữ C++
Hàm:
void ten_ham(biến hình thức)
{
Các lệnh;
}

VIDEO 5

VÍ DỤ: BÀI TOÁN PHÂN SỐ TỐI GIẢN
Nhập hai số nguyên dương a và b. Hiện phân số tối giản của phân số .
Input: Một dòng chứa hai số nguyên dương a và b
Pstoigian.in Pstoigian.o
p
ut
Ouput: Hiện ra phân số tối giản
uses crt;
var f1, f2:text;
var a, b: integer;
procedure nhap;
begin
assign(f1,' Pstoigian.inp');
reset(f1);
read(f1, a, b);
close(f1);
end;
function ucln(x, y:integer);
begin
while (x<>y) do
If (x>y) then x:=x mod y;
Else y:=y mod x;

10 25

ucln:=x;
end;
procedure xuli;
var t : integer;
begin
assign(f2,' Pstoigian.out');
rewrite(f2);
t:=ucln(a,b);
if (b=1) then
write(f2, a, '/', b);
else
write(f2, a/t, '/', b/t);
close(f2);
end;

begin
nhap;
xuli;
end.

2/5

VÍ DỤ: BÀI TOÁN PHÂN SỐ TỐI GIẢN
Nhập hai số nguyên dương a và b. Hiện phân số tối giản của phân số .
Input: Một dòng chứa hai số nguyên dương a và b
Pstoigian.in Pstoigian.o
p
ut
Ouput: Hiện ra phân số tối giản
#include
using namespace std;
int a, b;
int ucln(int x, int y)
{
while(x!=y)
If(x>y) x=x%y;
else y=y%x;
return x;
}
void xuli()
{
int t=ucln(a, b);
if (b==1)
cout<
10 25

else
cout<}
int main()
{
freopen("Pstoigian.inp", "r",
stdin);
freopen("Pstoigian.out", "w",
stdout);
cin>>a>>b;
xuli();
return 0;
}

2/5

MẢNG 1 CHIỀU
Ngôn ngữ Pascal
Khai báo biến mảng 1 chiều:
var : Array[1..spt] of liệu>;
Ví dụ: var A : Array[1..10] of integer;
Nhập mảng 1 chiều:
assign(f1,' mang.inp');
reset(f1);
read(f1,n);
for i:=1 to n do
read(f1,A[i]);
close(f1);

Ngôn ngữ C++
Khai báo biến mảng 1 chiều:
[kích thước];
Ví dụ: int A[10];
Nhập mảng 1 chiều:
freopen("mang.inp", "r", stdin);
cin>>n;
for(int i=1;i<=n;i++)
cin>>A[i];

MẢNG 1 CHIỀU
Ngôn ngữ Pascal
Xuất mảng 1 chiều:
assign(f2,' mang.out');
rewrite(f2);
for i:=1 to n do
write(f2,A[i],' ');
close(f2);
Sắp xếp tăng trên mảng 1 chiều:
for i:=1 to n -1 do
for j:=i+1 to n do
if A[i]>A[j] then
begin
Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam;
end;

Ngôn ngữ C++
Xuất mảng 1 chiều:
freopen("mang.out", "w", stout);
for(int i=1;i<=n;i++)
cout<Sắp xếp tăng trên mảng 1 chiều:
sort(A,A+n);
Sắp xếp giảm trên mảng 1 chiều:
sort(A,A+n, greater ());

XÂU KÝ TỰ
Ngôn ngữ Pascal
Khai báo biến xâu:
var : string;
Ví dụ: var s:string;
Nhập xâu ký tự:
read(s);
Xuất xâu ký tự:
write(s);

Ngôn ngữ C++
Khai báo biến xâu:
string ;
Ví dụ: string s;
Nhập xâu ký tự:
Nhập xâu không có khoảng cách:
cin>>s;
Nhập xâu có thể có khoảng cách:
getline(cin,s);
Xuất xâu ký tự:
cout<
XÂU KÝ TỰ
Ngôn ngữ Pascal
Đếm các ký tự là số trong xâu:
var dem,i:integer;
for i:=1 to length(s) do
if(s[i] in ['0' .. '9']) then
dem:=dem+1;
Tính tổng các ký tự số trong xâu:
var T=0,i:integer;
for i:=1 to length(s) do
if(s[i] in ['0' .. '9']) then
T:=T+s[i];

Ngôn ngữ C++
Đếm các ký tự là số trong xâu:
int dem=0;
for(int i=0;iif(s[i]>='0'&&s[i]<='9')
dem++;
Tính tổng các ký tự số trong xâu:
int T=0;
for(int i=0;iIf(s[i]>='0'&&s[i]<='9')
T+=(int)s[i];

MẢNG 2 CHIỀU
Ngôn ngữ Pascal
Khai báo mảng 2 chiều:
var : Array[1..sptd] [1..sptc] of
;
Ví dụ: var A : Array[1..10] [1..10] of
integer;
Nhập mảng 2 chiều:
assign(f1,' mang2.inp');
reset(f1);
read(f1,n,m);
for i:=1 to n do
for j:=1 to m do
read(f1,A[i][j]);
close(f1);

Ngôn ngữ C++
Khai báo mảng 2 chiều:
[kích thước
dòng][kích thước cột];
Ví dụ: int A[10][10];
Nhập mảng hai chiều:
freopen("mang2.inp", "r", stdin);
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>A[i][j];

MẢNG 2 CHIỀU
Ngôn ngữ Pascal
Xuất mảng 2 chiều:
assign(f2,' mang2.out');
rewrite(f2);
for i:=1 to n do
for j:=1 to m do
write(f2,A[i],' ');
close(f2);
Tổng các phần tử mảng 2 chiều:
var S:=0;
for i:=1 to n do
for j:=1 to m do
S:=S+A[i];

Ngôn ngữ C++
Xuất mảng hai chiều:
freopen("mang2.out", "w", stout);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cout<Tổng các phần tử mảng 2 chiều:
int S=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
S=S+A[i][j];

KIẾN THỨC LẬP TRÌNH NÂNG CAO
 Phân tích và giải một số bài toán số học thông dụng.
 Phân tích và giải một số bài toán trên xâu ký tự.
 Phân tích và giải một số bài toán trên mảng 1 chiều.
 Phân tích và giải một số bài toán trên mảng 2 chiều.
 Các thuật toán nâng cao: đếm, tìm kiếm, đệ qui, véc cạn, qui
hoạch động, chặt nhị phân.

4. CẤU TRÚC ĐỀ THI HSG
ĐỀ THI HSG CẤP HUYỆN
Gồm 3 câu: tổng điểm 20.
- 1 câu số học / hình học.
- 1 câu mảng 1 chiều / xâu ký tự.
- 1 câu mảng 2 chiều.

ĐỀ THI HSG CẤP TP
Gồm 3 câu: tổng điểm 20.
Số, mảng, xâu, ma trận. Sẽ có 1
câu dùng thuật toán nâng cao để
giải.

5. PHÂN TÍCH, GIẢI ĐỀ THI CẤP HUYỆN NĂM 2022

Bài 1: Tách số (5 điểm)
Cho một xâu ký tự bất kỳ gồm chữ và số. Em hãy tách phần là số của xâu đó ra.
Sắp xếp các số theo thứ tự tăng dần. In ra các số vừa sắp xếp.
Dữ liệu vào: một dòng là chuỗi ký tự S có độ dài nhỏ hơn 1000 ký tự la tinh và ký
tự số.
Dữ liệu ra: các số có trong xâu S sau khi sắp xếp.

BAI1.INP

BAI1.OUT

Ac23b 45ef bc7bn35

7 23 35 45

Bài 1: Tách số (5 điểm)
Cho một xâu ký tự bất kỳ gồm chữ và số. Em hãy tách phần là số của xâu đó ra.
Sắp xếp các số theo thứ tự tăng dần. In ra các số vừa sắp xếp.
Dữ liệu vào: một dòng là chuỗi ký tự S có độ dài nhỏ hơn 1000 ký tự la tinh và ký
tự số.
Dữ liệu ra: các số có trong xâu S sau khi sắp xếp.

Phân tích đề cách 1:
 Nhập xâu S.
 Duyệt xâu và tách số.
 Sắp xếp các số đã tách tăng dần.
 Xuất kết quả sắp xếp.

Tách số trong xâu:
 Duyệt xâu từ đầu đến cuối.
 Nếu gặp số thì đưa vào tổng.
 Ngược lại đổi tổng ra số đưa vào
mảng.
 Cập nhật lại tổng.

CODE BÀI 1 (CÁCH 1)
#include
using namespace std;
string s;
int a[100];
int main()
{
freopen("BAI1.inp","r",stdin);
freopen("BAI1.out","w",stdou
t);
getline(cin,s);
int i,j=1,tong=0;

for(i=0;i<=s.size();i++)
for(i=1;i{
for(int t=i+1;t<=j-1;t++)
if(s[i]>='0'&&s[i]<='9')
if(a[i]>a[t])
tong=tong*10+((int)s[i]{
48);
int tam=a[i];
else
a[i]=a[t];
{
a[t]=tam;
if(tong!=0) {
}
a[j]=tong;
for(i=1;i<=j-1;i++)
j++;
cout << a[i]<<" ";
tong=0;
}
return 0;
}
}
}

Bài 1: Tách số (5 điểm)
Cho một xâu ký tự bất kỳ gồm chữ và số. Em hãy tách phần là số của xâu đó ra.
Sắp xếp các số theo thứ tự tăng dần. In ra các số vừa sắp xếp.
Dữ liệu vào: một dòng là chuỗi ký tự S có độ dài nhỏ hơn 1000 ký tự la tinh và ký
tự số.
Dữ liệu ra: các số có trong xâu S sau khi sắp xếp.

Phân tích đề cách 2:
 Xây dựng hàm điều kiện sắp xếp xâu.
 Nhập xâu S.
 Duyệt xâu và tách số đưa vào mảng
xâu.
 Sắp xếp mảng xâu tăng dần.
 Xuất kết quả sắp xếp.

Tách số đưa vào mảng xâu:
 Duyệt xâu từ đầu đến cuối.
 Trong khi gặp số thì đưa vào xâu
S1.
 Nếu S1 khác rỗng thì đưa S1 vào
mảng xâu ST. Cập nhật lại S1.
 Sắp xếp xâu ST và xuất kết quả.

CODE BÀI 1 (CÁCH 2)
#include
using namespace std;
bool cmp(string a, string b)
{
if(a.size() == b.size())
{
if(a > b) return 0;
else return 1;
}
else
{
if(a.size() > b.size())
return 0;
else return 1;
}
}

int main()
{
string S, ST[1001];
int j=0;

S1=S1+S[i];
i++;
}
if(S1!="")
{
freopen("BAI1.inp","r",stdin
j++;
);
ST[j]=S1;
}
freopen("BAI1.out","w",std
}
out);
sort(ST+1,ST+j+1,cmp);
getline(cin,S);
for(int i=1;i<=j;i++)
for(int i=0;icout<+)
return 0;
{
}
string S1="";
while(S[i]>='0'&&S[i]<='9')
{

Bài 2: Xóa ô trắng (8 điểm)

Cho một bảng ô vuông gồm n dòng và m cột. Các dòng được đánh số từ 1 đến n, các cột được đánh số từ 1
đến m. Ô nằm ở vị trí dòng I và cột j gọi là ô (I,j). Có K ô màu đen trên bảng, ô đen thứ I nằm ở vị trí (xi,yi).
Các ô còn lại trong bảng đều có màu trắng. Em có thể thực hiện một trong hai thao tác sau (mỗi thao tác có
thể được thực hiện nhiều lần hoặc không lần nào):
- Chọn một dòng chỉ có các ô màu trắng và xóa khỏi bảng đó.
- Chọn một cột chỉ có các ô màu trắng và xóa cột đó khỏi bảng.
Em hãy tìm cách thực hiện các loại thao tác trên, sao cho số ô còn lại trong bảng là nỏ nhất có thể.
Dữ liệu vào:
- Dòng đầu tiên gồm ba số nguyên n, m, k (1≤n,m,k≤105) là số dòng, số cột và số ô màu đen.
- K dòng tiếp theo, dòng thứ i gồm hai số nguyên xi, yi (1≤xi≤n, 1≤yi≤m) là vị trí của ô màu đen thứ i.
Dữ liệu vào bảo đảm không có hai ô đen nào ở cùng vị trí.
Dữ liệu ra: In ra số ô còn lại nhỏ nhất có thể sau khi thực hiện haI loại thao tác trên.

Bài 2: Xóa ô trắng (8 điểm) Cho một bảng ô vuông gồm n dòng và m cột. Các dòng được đánh số từ 1 đến

n, các cột được đánh số từ 1 đến m. Ô nằm ở vị trí dòng I và cột j gọi là ô (I,j). Có K ô màu đen trên bảng, ô
đen thứ I nằm ở vị trí (xi,yi). Các ô còn lại trong bảng đều có màu trắng. Em có thể thực hiện một trong hai
thao tác sau (mỗi thao tác có thể được thực hiện nhiều lần hoặc không lần nào): - Chọn một dòng chỉ có các ô
màu trắng và xóa khỏi bảng đó.
- Chọn một cột chỉ có các ô màu trắng và xóa cột đó khỏi bảng.
Em hãy tìm cách thực hiện các loại thao tác trên, sao cho số ô còn lại trong bảng là nỏ nhất có thể.
Dữ liệu vào: - Dòng đầu tiên gồm ba số nguyên n, m, k (1≤n,m,k≤105) là số dòng, số cột và số ô màu đen.
- K dòng tiếp theo, dòng thứ i gồm hai số nguyên xi, yi (1≤xi≤n, 1≤yi≤m) là vị trí của ô màu đen
thứ i. Dữ liệu vào bảo đảm không có hai ô đen nào ở cùng vị trí.
Dữ liệu ra: In ra số ô còn lại nhỏ nhất có thể sau khi thực hiện haI loại thao tác trên.

Phân tích đề cách 1:
 Nhập dữ liệu theo yêu cầu đề.
 Tạo ma trận.
 Duyệt dòng xóa dòng toàn màu trắng.
 Duyệt cột xóa toàn cột màu trắng.
 Xuất kết quả số dòng x số cột.

Xóa dòng toàn ô trắng:
 Duyệt dòng, duyệt cột.
 Tính tổng dòng nếu là 0 thì dồn
dòng sau lên.
 Giảm số dòng.
Xóa cột toàn ô trắng: tương tự.
 
Gửi ý kiến