1. Trang chủ
  2. » Giáo án - Bài giảng

Bai on tap HSG tin học THCS

33 546 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 33
Dung lượng 328,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

BÀI ÔN TẬP TIN HỌC Bài 1: Viết chương trình nhập vào một số tự nhiên N N là số lẻ, sau đó điền các số từ 1 đến n2vào trong một bản vuông sao cho tổng các hàng ngang, hàng dộc và hai đườn

Trang 1

BÀI ÔN TẬP TIN HỌC Bài 1:

Viết chương trình nhập vào một số tự nhiên N (N là số lẻ), sau đó điền các số từ 1 đến n2vào trong một bản vuông sao cho tổng các hàng ngang, hàng dộc và hai đường chéo đều bằng nhau(bảng này được gọi là Ma phương)

Ví dụ: - Nhập N = 3 -> Xuất

- Nhập N = 5 -> Xuất

Cách giải: Xuất phát từ ô bên phải của ô nằm giữa Đi theo hướng đông bắc để điền các số 1,2,3….

Khi điền số, cần chú ý các nguyên tắc sau:

+ Nếu vượt ra phía ngoài bên phải của bảng thì quay trở lại cột đầu tiên

+ Nếu vượt ra phía ngoài bên trên của bảng thì quay trở lại dòng cuối cùng

+ Nếu số đã điền k chia hết cho N thì số tiếp theo sẽ được viết trên cùng một hàng với k nhưngcách 01 ô về phía bên phải

Bài 3: Cấp số cộng (Đề thi cấp Quận Thốt Nốt NH 2014-2015)

Một dãy số được gọi là cấp số cộng nếu từ số hạng thứ hai trở đi mỗi số hạng bằng số hạngđứng trước đó cộng với một số không đổi Ví dụ: 1,4,7,10

* Yêu cầu:

Nhập dãy số nguyên a gồm n số và số k>=3 Xét xem:

+ Trong dãy có k số đứng cạnh nhau lập thành cấp số cộng?

* Cách giải:

- Nhập n và dãy a gồm n số nguyên Nhập k

+ Dùng biến d để điếm các bộ k số đứng cạnh nhau lập thành cấp số cộng.

+ Dùng biến d1 để đếm các phần tử vừa đọc đứng cạnh nhau có tính chất: cùng với hai

số đứng kề sau nó lập thành cấp số cộng.

+ Dùng biến d2 để điếm riêng các bộ 3 số đứng cạnh nhau lập thành cấp số cộng.

- Khởi đầu d=0, d1=0, d2=0

- Dùng vòng lặp FOR cho I chạy từ 1 đến n – 2

+ Nếu a[i] + a[i+2] = 2*a[i+1] thì tăng d1 và tăng d2 ngược lại cho d1=0;

3

ĐôngBắc

Trang 2

ngược lại không có.

- Nếu d2 = n – 2 thì cả dãy là cấp số cộng ngược lại không phải

Dùng thủ tục THEM(x) để bổ sung phần tử mới vào mảng a:

Dùng vòng lặp FOR, cho i chạy từ 1 đến k Nếu a[i] = x thì thoát thủ tục

Ra khỏi vòng lặp tăng k, cho a[k]:= x

- Sắp xếp dãy a thành dãy giảm

- Có phần tử nào = x cho trước không? Nếu không có, hãy bổ sung x vào dãy sao cho khôngphá vỡ tính chất giảm của dãy

Ra khỏi vòng lặp ta được dãy a giảm

- Khởi đầu i = n, a[0]=x+1 (đặt lính canh bên trái)

Dùng vòng lặp WHILE, chừng nào a[i]<x thì còn

+ Dòng đầu ghi số nguyên dương N (N<=10000),

+ Dòng tiếp theo ghi N số nguyên dương (mỗi số cách nhau một dấu cách)

Kết quả ra: Xuất ra màn hình gồm:

- Nếu tạo thành cấp số cộng thì ghi:

+ Dòng 1: LA CAP SO CONG

+ Dòng 2: CONG SAI

- Nếu không tạo thành cấp số cộng thì ghi:

+ KHONG LAP THANH CAP SO CONGVD:

7

5 11 9 15 13 7 17

LA CAP SO CONGCONG SAI 2Hoặc

Trang 3

CAPSO.INP CAPSO.OUT

4

Cách giải:

Cấp số cộng là một dãy tăng hoặc giảm Vì ta có thể sắp xếp lại dãy số (theo đầu bài) nên ta

có thể xem là dãy tăng

Viết thủ tục NHAPMANG a với n phần tử

Dùng hàm KTCS kiểm tra dãy số có phải là cấp số cộng hay không:

Tính d = a[2] – a[1]

Dùng vòng lặp FOR, cho i chạy từ 1 đến n -1

Nếu a[i+1] – a[i] <> d thì Hàm lấy giá trị false; exit

Ngoài vòng lặp hàm gán giá trị true

Trong chương trình chính:

Gọi NHAPMANG;

Sắp xếp mảng theo chiều tăng;

Nếu KTCS = true thì trả lời: có thể và công saiTrường hợp ngược lại trả lời: không thể

Bài 7: Xâu chuẩn (Đề thi cấp Quận Thốt Nốt NH 2014-2015)

* Yêu cầu:

Nhập một xâu kí tự Đưa xâu đó về dạng chuẩn, nghĩa là:

+ Không còn ô trống ở đầu và cuối xâu

+ Không còn 2 ô trống kề nhau

+ Không còn các ô trống đứng liền trước dấu chấm

+ Kí tự đầu tiên và kí tự sau dấu chấm phải viết hoa

* Ví dụ:

trong Window khi xoa file Trong Window Khi xoa file

* Cách giải:

- Dùng biến tam để xem vòng lặp còn tiếp tục được nửa không.

- Khởi đầu tam = true

- Dùng vòng lặp WHILE, chừng nào tam còn = true thì còn

- Ra khỏi vòng lặp WHILE đó thực hiện thêm một vòng FOR nữa:

cho i chạy từ 1 đến độ dài xâu – 1

nếu s[i] = dấu chấm thì nâng kí tự s[i+2] thành chữ hoa

- Cuối cùng nâng kí tự s[1] thành chữ hoa

Bài 8: Số nhỏ nhất (Đề thi cấp Quận Thốt Nốt NH 2014-2015)

* Yêu cầu:

Nhập vào một số nguyên dương n và số k xóa đi k chữ số trong số nguyên n sao cho số cònlại có giá trị bé nhất

Trang 4

- Nhập số dưới dạng xâu kí tự s để dễ thao tác với các số.

- Ký hiệu n là độ dài của s Ký hiệu s1 là số còn lại sau khi đã xóa đi k kí tự (để được sốmin) Độ dài của s1 là n-k

- Dùng hàm CHON để chọn vị trí trong s của chữ số thứ I của s1

k1 là vị trí khởi đầu để đi tìm vị trí đó

- Trong chương trình chính dùng vòng lặp FOR, cho I chạy từ 1 đến độ dài của s1 để lầnlược tìm các chử số

Khai báo mảng các ký tự gồm 26 chữ cái

Var a:array[1 26,1 26] of char;

Nhập vào số nguyên dương n là số lượng các chữ cái cần sắp xếp

Dùng 2 vòng lặp FOR, cho i chạy từ 1 đến n

cho j chạy từ 1 đến n Khi i=1 thì j chạy từ 1 đến n ta có: a[1,1]=A, a[1,2]=B, a[1,3]=C, a[1,4]=D

Khi i=2 thì j chạy từ 1 đến n ta có: a[2,1]=A, a[2,2]=B, a[2,3]=C, a[2,4]=D

Khi i=3 thì j chạy từ 1 đến n ta có: a[3,1]=A, a[3,2]=B, a[3,3]=C, a[4,4]=D

Khi i=4 thì j chạy từ 1 đến n ta có: a[4,1]=A, a[4,2]=B, a[4,3]=C, a[4,4]=D

Bài 10:

Viết chương trình liệt kê tất cả các số tự nhiên có 3 chữ số mà tổng các chữ số của nó bắng

số tự nhiên cho trước

Trang 5

Xét một phương trình có dạng như sau: x+y+z=K Trong đó K là một số nguyên dương.Phương trình này có thể vô số nghiệm Tuy nhiên, ở đây người ta chỉ quan tâm đến các nghiệm(x,y,z) mà trong đó các số x, y, z đều là các số nguyên tố.

Bài toán: Với số K cho trước ( K<5000), hãy tìm tất cả các bộ số nguyên tố x, y, z ( x<=y<=z) lànghiệm của phương trình trên hoặc cho biết không có nghệim thỏa mãn yêu cấu bài tóan

Dữ liệu vào: Cho trong file Equa.inp trong đó có chứa duy nhất số K

Kết quả: Ghi ra file Equa.out chứa n+1 dòng ( n là số nghiệm tìm được), trong đó:

- Dòng thứ I trong N dòng đầu tiên chứa 3 số nguyên cho biết bộ nghiệm thứ I tìm được

- Dòng n+1 chứa 3 số 0 cho biết điểm kết thúc file output

* Cách giải:

Bài 13: Số dư thừa

Số tự nhiên N gọi là dư thừa nếu tổng các ước số của N ( bao gồm cả 1 nhưng không có N ) lớn hơnN

Bài toán:

Tìm số M là số dư thừa nhỏ nhất không nhỏ hơn N

Dữ liệu: Cho trong file văn bản ANUM.INP, gồm số tự nhiên N

Kết quả: Cho trong tập tin văn bản ANUM.OUT, gồm số M là số dư thừa nhỏ nhất không nhỏ hơn

N Giả sử rằng kết quả là số tự nhiên không quá 10000.

BÀI 14: GIAI THỪA

Với mỗi số nguyên dương N, ta hiểu N! là tích của N số nguyên dương đầu tiên

Cho trước số nguyên dương N (1 < N < 31)

Yêu cầu: Tìm số nguyên dương K nhỏ nhất sao cho tích của K và N! là số chính phương

Dữ liệu: Vào từ tập tin văn bản GIAITHUA.INP chứa duy nhất số N.

Kết quả: Ghi ra tập tin văn bản GIAITHUA.OUT số nguyên K tìm được.

Trang 6

Hãy lập trình để giải bài toán trên.

* Cách giải:

Bài 16: SỐ MERSEN

Số N nguyên tố được gọi là số Mersen nếu có dạng 2p-1 trong đó p cũng là số nguyên tốViết chương trình nhập vào số nguyên dương N (N<10000) in ra tất cả các số Mersen nhỏhơn hay bằng N

Hãy tìm tất cả các số amstrong có k chữ số với 3<=k<=6;

Kết quả: Mỗi số được tìm viết trên một dòng.

Dòng cuối cùng ghi số các số tìm được

Bai 18 : XẾP GẠCH (Đề thi cấp Huyện Cờ Đỏ NH 2015-2016)

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ồnglê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ị của Minh trả lời “Em phải xếp các viên gạch có độ cao giống nhaumới được gọi là một bức tường” Sau khi nghe chị nói như vậy nó cân nhắc một tí và cho rằng ýkiến ấy 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úpMinh di chuyển các viên gạch với số lần ít nhất

Yêu cầu: Hãy lập trình đư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 chiếcmột cho đến khi hoàn thành công việc

Dữ liệu vào: có cấu trúc sau:

- dòng đầu tiên là số n, n là số các chồng gạch,

- dòng tiếp theo lần lượt là các hi, độ cao của chồng gạch thứ i (1≤ n ≤ 50; 1≤ hi ≤ 100; i =1 n) Lưu ý rằng số viên gạch bao giờ cũng chia hết cho số chồng gạch

Dữ liệu ra: chỉ có một dòng chứa một số nguyên dương là kết quả tính toán số lần ít nhất

sau khi xếp lại các chồng gạch Nếu không có kết quả cũng phải ghi rõ “KHONG CAN DICHUYEN LAN NAO”

Ví dụ: với hình trên ta có dữ liệu vào, ra:

Trang 7

5 2 4 1 7 57

9 9 9 9 9 9 9

Khong can di chuyen lan nao

ý tưởng : Tìm ucln của các h[i] => lấy h[i] chia cho ucnl lưu vào 1 mảg => tìm đc số gạch ở mỗi chồg => lấy ucln làm mốc , so sánh với số viên gạch ở các chồg => cĩ bao nhiêu chồg cĩ số gạch

< ucln thì cĩ bấy nhiêu lần phải sx

Bài 19: Dãy con lớn nhất

Cho một mảng số nguyên gồm n phần tử Tìm dãy con gồm m phần tử (m≤n) sao cho dãycon này cĩ tổng lớn nhất (Dãy con là dãy các phần tử liên tiếp nhau trong mảng)

nhập n, nhập các phần tử của dãy, nhập m, in ra dãy con cĩ m phần tử

Bài 20: Số đơn điệu

Các số nguyên dương 3748, 58, 859, 32435465768 được gọi là các số đơn điệu do nếu quan sát các chữ số của số này , ta thấy chúng luân phiên tăng giảm hoặc giảm tăng Chẳng hạn: 3 < 7 > 4 <

8 và 3 > 2 < 4 > 3 < 5 > 4 < 6 > 5 < 7 > 6 < 8

Số chỉ cĩ một chữ số là số đơn điệu chiều dài 1

Hãy viết chương trình xác định số chữ số đầu tiên lớn nhất tạo thành số đơn điệu của một số cho trước Nhập vào một số nguyên dương khơng quá 75 chữ số

Xuất ra số chữ số đầu tiên lớn nhất tạo thành số đơn điệu

BÀI 21: TỔNG 2 SỐ NGUYÊN TỐ (Đề thi cấp Huyện Cờ Đỏ NH 2015-2016)

Trong m t b c th mà Christian Goldbach g i cho Euler, ơng ã c p n ph ng o án c amình: M i s t nhiên ch n l n h n 2 u là t ng c a 2 s nguyên t

Hãy l p ch n g trình ki m ch ng ph ng o án c a Goldbach

Yêu c u:

- D li u vào t file GB.INP g m nhi u dịng, dịng u là s test (<10), các dịng ti p theo m idịng ghi 1 s t nhiên ch n l n h n 2 (<32000)

- D li u ra là file GB.OUT g m các dịng (m i dịng n g v i 1 test) - m i dịng

g m 2 s nguyên t cách nhau ít nh t 1 d u cách cĩ t ng b ng s ã cho (ho c khơng tìm

c – ghi là “khong”)

Input Output

3 8 12 5

3 5

5 7

2 3 BÀI 22: ĐỌC SỐ LA MÃ

Viết chương trình nhập vào 1 số la mã rồi biến đổi thành số thập phân

Trang 8

mmCcXx 2220

Giới hạn: Số La mã nhập vào là chính xác Số thập phân nhỏ hơn 4000

Bài 23: Chữ số thứ N Tên chương trình là NUMBER.PAS

Khi viết các số tự nhiên tăng dần từ 1, 2, 3…liên tiếp nhau, ta nhận được một dãy các chữ sốthập phân vơ hạn, ví dụ: 1234567891011121314151617181920…

Yêu cầu: Hãy tìm chữ số thứ N của dãy số vơ hạn trên.

Dữ liệu vào: từ file NUMBER.INP gồm một số dịng, mỗi dịng ghi một số nguyên dương

N(N<109)

Kết quả: ghi ra file NUMBER.OUT, với mỗi số N đọc được từ file number.inp, ghi trên

dịng tương ứng chữ số thứ N của dãy

Ý tưởng thuật tốn:

Để giải bài tốn này, đơn giản là ta dị xem chữ số ở vị trí thứ N là bao nhiêu? Thay vì taphải dùng tay dị thì ta sử dụng suy luận và nhờ máy tìm giúp Cĩ nhiều cách hay để tìm Tuy nhiên,cách đơn giản nhất là ta cứ dị từ vị trí đầu tiên của dãy 0123456789…vơ hạn đĩ, dị đến vị trí thứ Nthì dừng và đưa ra chữ số ở vị trí này

+ Sử dụng 1 biến dùng để đếm tuần tự các số tự nhiên trong dãy.(biến K chẳng hạn)

+ Sử dụng một biến Vt dùng để đếm xem số K nằm ở vị trí thứ bao nhiêu?

+ Trong khi Vt cịn nhỏ hơn N thì Vt=Vt cộng với số chữ số của K

+ Xét xem trong xâu cĩ k ký tự kề nhau mà giống nhau hay khơng?

+ Tất cả các ký tự kề nhau mà giống nhau thì chỉ để lại một ký tự giống nhau đĩ

Dữ liệu nhập từ bàn phím:

- Dịng 1: xâu ký tự bất kì

Trang 9

- Nhập vào một ký tự ch Đếm số lần xuất hiện của ký tự ch trong xâu.

- Liệt kê các ký tự có mặt trong xâu cùng số lần xuất hiện của các ký tự đó

Nhap xau:thanh phu

Nhap ky tu can dem: h

Ky tu: h co mat: 2 lan -

Ky tu: a co mat: 1 lan

Ky tu: h co mat: 2 lan

Ky tu: n co mat: 1 lan

Ky tu: u co mat: 1 lan

Ky tu: p co mat: 1 lan

Ky tu: t co mat: 1 lan

- Dùng một biến đếm để đếm số cặp ở vị trí đối xứng mà khác nhau

- Khởi đầu i:=1, k:= độ dài xâu, biến đếm = 0

- Dùng vòng lặp WHILE, chừng nào I còn < k thì còn

Nếu s[i] <> s[k] thì

Đảo s[i] và s[k] cho nhau; tăng biến đếm;

Ngược lại tăng I, giảm k

Ra khỏi vòng lặp nếu biến đếm = 0 thì xâu đối xứng, ngược lại xâu không đối xứng, và bâygiờ là xâu đảo ngược

In dao nguoc xaudcba

Bài 29: Nhập hai xâu ký tự Đếm số lần xuất hiện của xâu này trong xâu kia.

Gợi ý:

- Nhập hai xâu s1,s2 cần đếm số lần s1 xuất hiện trogn s2

- Khởi động biến đếm = 0,

Trang 10

k:=pos(s1,s2); {Tìm vị trí xâu s1 trong xâu s2}

- Dùng vòng lặp WHILE, chừng nào k còn >0 thì còn

Tăng biến đếm;

Xóa k ký tự đầu của s2;

K:=pos(s1,s2);

Nhap xau thu nhat: phu

Nhap xau thu hai: thcs thanh phu So lan: phuco mat trong xau: thcs thanh phu

la = 1

Bài 30: (Đề thi cấp Thành phố NH 2014-2015)

Bài 31: (Đề thi cấp Thành phố NH 2014-2015)

BÀI 32: SẮP SỐ TRONG XÂU

Nhập một xâu s bao gồm số và kí tự, in ra xâu đã sắp xếp số theo thứ tự tăng dần còn vị trí các kí tự vẫn giữ nguyên?

abc6ghj7kkkkk1hhhh9 abc1ghj6kkkkk7hhhh9

HƯỚNG DẪN CÁCH GIẢI

Trang 13

Begin {chuong trinh chinh}

Write(‘Nhap vao so phan tu: ‘);readln(n);

Trang 14

for i:=1to n -1do

if(a[i]-a[i+1]<>d) then exit;

Trang 15

Begin{Chuong trinh chinh}

Write('Nhap xau ky tu: ');readln(s);

delete(s,k,1);

tam:=true;

end;

end;

for i:=1 to length(s) - 1 do

if s[i] = '.' then s[i+2]:=upcase(s[i+2]);

Trang 16

begin {chuong trinh chinh}

write('Nhap vao mot so: ');readln(s);

write('Nhap so chu so can xoa: ');readln(k);

for i:=1 to k do k1:=chon(i)+1;

writeln('So con lai sau khi xoa la: ',s1);

readln;

end

Bài 9:

Program Bai9;

type arr=array[1 26,1 26] of char;

var a: arr; i,j,n,m: integer;

Trang 19

var i:integer;

begin

NT:=False;

for i:=2 to trunc(sqrt(x)) do

if(x mod i=0)then Exit;

Trang 22

Write('Nhap vao so n: ');readln(n);

If (n<=0) or (n>10000) then writeln('Nhap lai !');

Trang 23

function Luythua (a:integer; b:integer):integer;

var i,r : integer;

Trang 25

Write('Nhap so phan tu cua day con: m= '); Readln(m);

k:=1; {V? trí ph?n t? d?u tiên c?a dãy con}

{Gi? s? m ph?n t? d?u tiên c?a m?ng A là dãy con có t?ng l?n nh?t}

For j:=i To i+m-1 Do S:=S+A[j];

If S>Max Then {N?u dãy con tìm du?c có t?ng l?n hon dãy con tru?c}

Begin

Max:=S; {Thay t?ng m?i}

k:=i; {Thay v? trí d?u tiên c?a dãy con m?i}

End;

End;

Writeln('Day con co tong lon nhat la:');

For i:=k To k+m-1 Do Write(A[i]:5);

until (kt=false) or (i>length(n)-2);

if kt=true then writeln(k) else writeln(j);

{if kt=true then writeln(n,' la so don dieu')

Trang 27

write('Nhap so La Ma: ');readln(s);

writeln('Gia tri cua so La Ma: ',s,' = ',lama(s,1));

Trang 28

clrscr;

write('Nhap chuoi: '); readln(st);

FOR i:= 1 TO length(st) DO

IF st[i] <> st[i+1] THEN

write('Nhap xau (a-z): '); readln(st);

FOR i:= 1 TO length(st) DO

Trang 29

writeln('Khong co ',k,' ky tu ke nhau ma giong nhau');

while xoa do;

Trang 30

writeln('Xau khong doi xung');

writeln('In xau dao nguoc');

write('Nhap xau thu nhat: ');readln(s1);

write('Nhap xau thu hai: ');readln(s2);

Trang 33

while pos('11',st)<>0 do delete(st,pos('11',st),1);

for i:=1 to length(st) do

Ngày đăng: 16/09/2016, 13:25

TỪ KHÓA LIÊN QUAN

w