MỘT SỐ BÀI TẬP PASCAL DÀNH CHO HỌC SINH GIỎI TIN 8
I. Bài tập về số chính phương (biến đơn):
1. Cho số nguyên n, kiểm tra n có phải là số chính phương không?
a. Ý tưởng: Dựa trên định nghĩa số chính phương: là bình phương của một số
tự nhiên.
- Ta có:
0 = 0.0, , , , ,
- Nhận xét: Số chính phương là số có phần thập phân của căn bậc 2 là 0.
- Như vậy, để viết chương trình ta sử dụng hàm sqrt() để lấy căn bậc 2,
hàm frac () để lấy phần thập phân.
b. Chương trình tham khảo:
Program CP;
Var n:longint;
Begin
Write (‘nhap n:’);
Readln (n);
If (frac(sqrt(n))=0) and (n>=0) then write (n, ‘la so CP’) else write
(n, ‘ko la so CP’);
Readldn
End.
2. In ra số chính phương nhỏ hơn 100.
a. Ý tưởng:
Để kiểm tra lần lượt các số chính phương nhỏ hơn 100 thì ta sẽ kiểm tra lần
lượt các số từ 0 đến 99 có phải là số chính phương không, bằng câu lệnh for
… to … do
b. Chương trình tham khảo:
Program CP;
Var i:longint;
Begin
For i:=0 to 99 do
If frac(sqrt(i))=0 then write (i,’ ‘);
Readldn
End.
3. Nhập vào số nguyên n. In ra số chính phương nhỏ hơn n.
a. Ý tưởng:
- Để tìm các số chính phương nhỏ hơn n thì chúng ta sẽ kiểm tra lần lượt
các số từ 0 đến n có phải là số chính phương không, bằng câu lệnh for …
to … do.
b. Chương trình tham khảo:
Program CP;
Var i:longint;
Begin
For i:= 0 to n do
If frac(sqrt(i))=0 then write (i);
Readldn
End.
4. In ra số chính phương có hai chữ số.
a. Ý tưởng:
Để kiểm tra lần lượt các số chính phương có hai chữ số thì chúng ta sẽ kiểm tra
lần lượt các số từ 10 đến 99 có phải là số chính phương không, bằng câu lệnh
for … to … do
b. Chương trình tham khảo:
Program CP;
Var i:longint;
Begin
For i:=10 to 100 do
If frac(sqrt(i))=0 then write (i, ‘ ‘);
Readldn
End.
5. In ra số chính phương là số chẵn nhỏ hơn 100.
a. Ý tưởng:
- Ví dụ: 4,16,36,….
- Để giải bài toán ta cần xác định 2 điều kiện phù hợp với 2 thuật toán:
+ thuật toán số chính phương
+ Kiểm tra số chính phương có phải là số chẵn không. Nếu là số chẵn thì
in ra.
- Để tìm các số chính phương nhỏ hơn 100 thì chúng ta sẽ kiểm tra lần lượt
các số từ 0 đến 99 có phải là số chính phương không, bằng câu lệnh for
… to … do.
- Kiểm tra số chính phương là số chẵn bằng cách kiểm tra số đó có chia hết
cho 2 không. Nếu số đó chia hết cho 2 là số chính phương chẵn, in ra.
b. Chương trình tham khảo:
Program CP;
Var i:longint;
Begin
For i:= 0 to 99 do
If (frac(sqrt(i))=0) and (i mod 2 =0 ) then write (i,’ ‘);
Readldn
End.
6. Nhập vào 2 số nguyên a,b (a<b) in ra các số chính phương nằm trong
khoảng a,b.
a. Ý tưởng:
- Lấy ví dụ: nhập a= 10, b = 49
KQ: 16,25,36,49
- Để kiểm tra lần lượt các số chính phương nằm trong khoảng a,b thì chúng
ta sẽ kiểm tra lần lượt các số từ a+1 đến b-1 có phải là số chính phương
không, bằng câu lệnh for … to … do. Với a,b nhập vào từ bàn phím.
b. Chương trình tham khảo:
Program CP;
Var I,n:longint;
Begin
Write (‘nhap a,b: ‘);
Readln (a,b);
For i:=a+1 to b-1 do
If frac(sqrt(i))=0 then write (i);
Readldn
End.
7. Nhập vào số nguyên n, in ra số chính phương lớn nhất, nhỏ hơn n.
a. Ý tưởng:
- Lấy ví dụ:
Nhập n = 60
KQ: 49
- Nếu n-1 <0 thì không có số chính phương lớn nhất, nhỏ hơn n. Ngược lại,
kiểm tra từ n-1, n-2, n-3,…. đến khi nào gặp số chính phương thì dừng,
sau đó in ra kết quả.
- Vì số vòng lặp không xác định được bao nhiêu lần nên ta sử dụng vòng
lặp không xác định repeat … until … (hoặc while … do).
b. Chương trình tham khảo:
Program CP;
Var i,n:longint;
Begin
Write (‘nhap n‘);
Readln (n);
If n – 1 <0 then write (‘khong co’) else
Repeat
n:=n-1;
until frac(sqrt(n))=0;
write (n);
Readldn
End.
8. Nhập vào số nguyên n, in ra số chính phương nhỏ nhất, lớn hơn n.
a. Ý tưởng:
- Lấy ví dụ:
Nhập n = 80
- Kiểm tra từ n+1, n+2, n+3,…. đến khi nào gặp số chính phương thì dừng,
sau đó in ra kết quả.
- Vì số vòng lặp không xác định được bao nhiêu lần nên ta sử dụng vòng
lặp không xác định repeat … until … (hoặc while … do).
b. Chương trình tham khảo:
Program CP;
Var i,n:longint;
Begin
Write (‘nhap n‘);
Readln (n);
Repeat n:=n+1
until frac(sqrt(n))=0;
write (n);
Readldn
End
9. Nhập số nguyên n, in ra 3 số chính phương liên tiếp lớn hơn hoặc bằng
n.
a. Ý tưởng:
- Lấy ví dụ: n = 10 => 16, 25, 36
- Kiểm tra từ n, n+1, n+2,… có phải số chính phương không, nếu là số
chính phương thì cộng vào biến đếm lần lượt 1 đơn vị, đến khi biến đếm
bằng 3 thì dừng và in kết quả.
- Vì số vòng lặp không xác định được bao nhiêu lần nên ta sử dụng vòng
lặp không xác định repeat … until … (hoặc while … do).
b. Chương trình tham khảo:
Program CP;
Var n,dem:longint;
Begin
Dem:=0;
Write (‘nhap n‘);
Readln (n);
If frac(sqrt(n)) = 0 then
Begin
dem:=dem+1;
Write (n,’ ‘);
End;
Repeat
n:=n+1;
If frac(sqrt(n)) = 0 then
Begin
dem:=dem+1;
Write (n,’ ‘);
End;
until dem=3;
Readldn
End.
II. Bài tập về mảng 1 chiều
1. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra các
phần tử chính phương.
a. Ý tưởng:
- Lấy ví dụ:
2 3 4 5 6 => 4
1 2 3 4 5 => 1 4
1 3 4 5 1 => 1 4 1
1 1 1 1 1 => 1 1 1 1 1
3 3 3 3 3 => khong co phan tu la so chinh phương
3 5 6 7 8 => khong co phan tu la so chinh phuong
- Nhập 1 dãy số nguyên a gồm n phần tử.
- Kiểm tra các phần tử của dãy a. Nếu phần tử nào là số chính phương thì
in phần tử đó ra.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
Dem,n,i: longint;
Begin
Read (n);
For i:=1 to n do
Read(a[i],’ ‘);
Dem:=0;
For i:=1 to n do
If frac(sqrt(a[i]))=0 then
begin
write (a[i],’ ‘); dem:=dem+1;
end;
if dem=0 then write (‘khong co phan tu la so chinh phuong’);
Readln.
End.
2. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra vị
trí các phần tử là số chính phương.
a. Ý tưởng:
- Lấy ví dụ:
3 4 5 7 9 => 2 và 5
5 2 3 4 5 => 4
2 3 4 5 4 => 3 5
4 4 4 4 4 => 1 2 3 4 5
3 3 3 3 3 => khong co phan tu la so chính phương
3 5 7 3 5 => khong co phan tu la so chinh phuong
- Nhập 1 dãy số nguyên a gồm n phần tử.
- Kiểm tra các phần tử của dãy a. Nếu phần tử nào là số chính phương thì
in ra vị trí của phần tử đó.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
Dem,n,i: longint;
Begin
Read (n);
Write (‘nhap mang a: ‘);
For i:=1 to n do
Read(a[i],’ ‘);
Dem:=0;
For i:=1 to n do
If frac(sqrt(i)) = 0 then
Begin
write (i,’ ‘); dem :=dem+1;
end;
if dem = 0 then write (‘ko co phan tu la so chinh phuong’);
Readln.
End.
3. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra các
phần tử là số chính phương và vị trí của nó.
a. Ý tưởng:
- Lấy ví dụ:
- 3 4 5 7 9 => 4 vi tri 2, 9 vi tri 5
- 5 2 3 4 5 => 4 vi tri 4
- 2 3 4 5 4 => 4 vi tri 3, 4 vi tri 5
- 4 4 4 4 4 => 4 vi tri 1, 4 vi tri 2, 4 vi tri 3, 4 vi tri 4, 4 vi tri 5
- 3 3 3 3 3 => khong co phan tu la so chính phương
- 3 5 7 3 5 => khong co phan tu la so chinh phuong
- Nhập 1 dãy số nguyên a gồm n phần tử.
- Kiểm tra các phần tử của dãy a. Nếu phần tử nào là số chính phương thì
in phần tử đó và vị trí của nó.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
Dem,n,i: longint;
Begin
Read (n);
For i:=1 to n do
Read(a[i],’ ‘);
Dem:=0;
For i:=1 to n do
If frac(sqrt(i)) = 0 then
Begin
writeln (a[i],’vi tri ‘,i); dem:=dem+1;
end;
if dem = 0 then write (‘khong co phan tu la so chinh phuong);
Readln.
End.
4. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra
phần tử chính phương lớn nhất trong dãy.
a. Ý tưởng:
- Lấy ví dụ:
2 3 7 5 9 => 9
2 1 4 5 9 => 9
4 4 4 4 => 4
3 5 6 7 => khong co so chinh phuong
- Tìm kiếm số chính phương
- So sánh từng phần tử là số chính phương trong mảng, tìm ra số lớn nhất.
bằng cách lấy phần tử max là 0, so sánh max với các phần tử chính
phương còn lại, phần tử nào lớn hơn max thì gán max là phần tử đó. In
kết quả là max.
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,n:longint;
Begin
Read (n);
For i := 1 to n do read (n);
Max:=0;
For i:=1 to n do
If frac(sqrt(a[i]))=0 and (a[i] > max) then max:=a[i];
If frac(sqrt(max)) = 0 then Write (max);
Readln.
End.
5. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra
phần tử là số chính phương nhỏ nhất trong dãy.
a. Ý tưởng:
- Lấy ví dụ:
2 4 7 5 7 => 4
2 1 4 5 9 => 1
4 4 4 4 => 4
3 5 6 7 => khong co so chinh phuong
- So sánh từng phần tử trong mảng, tìm ra phần tử nhỏ nhất. bằng cách lấy
phần tử thứ nhất là min, so sánh min với các phần tử còn lại, phần tử nào
nhỏ hơn min thì gán min là phần tử đó. Kiểm tra min là số chính phương
thì in kết quả là min.
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Min,i,n:longint;
Begin
Read (n);
For i := 1 to n do read (n);
Min:=a[1];
For i:=1 to n do
If frac(sqrt(a[i]))=0 and (a[i] < min) then min:=a[i];
If frac(sqrt(min)) = 0 then Write (min);
Readln.
End.
6. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra
phần tử là số chính phương lớn nhất trong dãy và vị trí của nó.
a. Ý tưởng:
- Lấy ví dụ:
2 3 7 5 9 => 9 vi tri 5
2 1 4 5 9 => 9 vi tri 5
4 4 4 4 => 4
3 5 6 7 => khong co so chinh phuong
- Tìm kiếm số chính phương
- So sánh từng phần tử là số chính phương trong mảng, tìm ra số lớn nhất.
bằng cách lấy phần tử max là 0, so sánh max với các phần tử chính
phương còn lại, phần tử nào lớn hơn max thì gán max là phần tử đó. In
kết quả là max và vị trí.
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,n:longint;
Begin
Read (n);
For i := 1 to n do read (a[i]);
Max:=0;
For i:=1 to n do
If frac(sqrt(a[i]))=0 and (a[i] > max) then max:=a[i];
For i:=1 to n
If (a[i] = max) and (frac(sqrt(max)) = 0) then
Write (max,’ ‘, ‘vi tri’,’ ‘,i);
Readln.
End.
7. Nhập vào mảng a gồm n phần tử, in ra phần tử là số chính phương xuất hiện
nhiều nhất trong mảng.
Chương trình tham khảo:
var a:array [1..50] of longint;
n,i,j,max,dem:longint;
begin
read (n);
for i:=1 to n do read (a[i]);
max := 0;
for i:=1 to n do
if frac(sqrt(a[i])) = 0 then
begin
dem :=0;
for j:= i to n do
if a[i] = a[j] then dem:=dem+1;
if dem > max then max:= dem;
end;
if max = 0 then write ('khong co ptu xh nhieu nhat')
else
for i:=1 to n do
if frac(sqrt(a[i])) = 0 then
begin
dem:=0;
for j:=i to n do
if a[i] = a[j] then dem:=dem+1;
if dem > max then max:=dem;
if dem = max then begin
writeln (max); write (a[i],' ');
end; end;
Readln;
Readln;
End.
8. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. Sắp xếp
mảng theo thứ tự tăng dần.
a. Ý tưởng:
- Lấy ví dụ: 93742 => 2 3 4 7 9
74833 => 3 3 4 7 8
11111 => 1 1 1 1 1
00000 => 0 0 0 0 0
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,n,tg:longint;
Begin
Read (n);
For i := 1 to n do read (a[i]);
For i:=i to n-1 do
Begin
For j:=i+1 to n do
If a[j] < a[i] then
begin
tg:=a[i]; a[i]:=a[j]; a[j] :=tg;
end;
for i:=1 to n do
write (a[i],’ ‘);
Readln.
End.
9. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. Sắp xếp
các số chính phương theo thứ tự tăng dần, các số còn lại vẫn giữ nguyên
vị trí.
a. Ý tưởng:
- Lấy ví dụ:
2 1 9 7 3 4 => 2 1 4 7 3 9
1 1 1 1 1 1 => 1 1 1 1 1 1
0 0 0 0 0 0 => 0 0 0 0 0 0
1 2 3 4 5 6 => 1 2 3 4 5 6
9 1 4 16 4 1 => 1 1 4 4 9 16
- Tìm các phần tử là số chính phương, so sánh chúng với nhau. Đổi chỗ để
được trật tự đúng.
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
J,i,n,tg:longint;
Begin
Read (n);
For i := 1 to n do read (a[i]);
For i:=1 to n-1 do
Begin
If frac(sqrt(a[i])) = 0 then
For j:=i+1 to n do
If a[j] < a[i] then
begin
tg:=a[i]; a[i]:=a[j]; a[j] :=tg;
end;
end;
for i:=1 to n do
write (a[i],’ ‘);
Readln.
End.
10. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. Sắp xếp
mảng theo thứ tự tăng dần số chính phương 1 hàng, các số còn lại 1
hàng.
a. Ý tưởng:
- Lấy ví dụ:
2 1 9 7 3 4 => 1 4 9___ 2 3 7
1 1 1 1 1 1 => 1 1 1 1 1 1
0 0 0 0 0 0 => 0 0 0 0 0 0
1 2 3 4 5 6 => 1 4 ___ 2 3 5 6
9 1 4 16 4 1 => 1 1 4 4 9 16
- Sắp xếp các phần tử của dãy theo thứ tự tăng dần, in lần lượtcác phần tử
là số chính phương và các phần tử còn lại
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,n,tg:longint;
Begin
Read (n);
For i := 1 to n do read (a[i]);
For i:=1 to n-1 do
For j:=i+1 to n do
If a[j] < a[i] then
begin
tg:=a[i]; a[i]:=a[j]; a[j] :=tg;
end;
for i:=1 to n do if frac(sqrt(a[i])) = 0 then write (a[i],’ ‘);
writeln;
for i:=1 to n do if frac(sqrt(a[i])) <> 0 then write (a[i],’ ‘);
Readln.
End.
11. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. Chèn số k
vào vị trí đầu dãy.
a. Ý tưởng:
- Lấy ví dụ:
2 3 4 5 6 7 => 9 2 3 4 5 6 7
- Đưa các phần tử trong mảng a lui về sau 1 đơn vị, sau đó chèn số k vào vị
trí đầu tiên của dãy.
- In kết quả.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
I,n,k: longint;
Begin
Read (n);read (k);
For i:=1 to n do read (a[i]);
For i:=n+1 downto 2 do
A[i]:=a[i-1];
A[1]:=k;
For i:=1 to n+1 do
Write (a[i], ‘ ‘);
Readln;
Readln;
End.
12. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. Chèn số k
vào vị trí cuối cùng của dãy.
a. Ý tưởng:
- Lấy ví dụ:
2 3 4 5 6 7 => 2 3 4 5 6 7 9
- Giữ nguyên các phần tử của dãy, sau đó chèn số k vào vị trí cuối cùng của
dãy. In kết quả.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
I,n: longint;
Begin
Read (n); read (k);
For i:=1 to n do read (a[i]);
For i:=1 to n+1 do a[n+1]:=k;
For i:=1 to n+1 do write (a[i], ‘ ‘);
Readln;
Readln;
End.
13. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. kiểm tra
số k, nếu số k là số chính phương thì chèn số k vào vị trí đầu dãy, ngược
lại thì chèn vào cuối dãy.
a. Ý tưởng:
- Lấy ví dụ:
3 3 4 5 6 7 => 9 2 3 4 5 6 7
4 6 3 7 8 1 => 4 6 3 7 8 1 5
- Kiểm tra số k có phải là số chính phương không,
- nếu số k là số chính phương thì chèn số k vào vị trí đầu dãy, ngược lại thì
chèn vào cuối dãy.
- In kết quả.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
I,n,k: longint;
Begin
Read (n);read (k);
For i:=1 to n do read (a[i]);
If frac(sqrt(k)) = 0 then
begin
For i:=n+1 downto 2 do
A[i]:=a[i-1];
A[1]:=k;
End;
If frac(sqrt(k)) <> 0 then
begin
For i:=1 to n+1 do
A[n+1]:=k;
End;
For i:=1 to n+1 do
Write (a[i], ‘ ‘);
Readln;
Readln;
End.
14. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử và số
nguyên k, thay thế tất cả các số chính phương trong dãy bằng số k.
a. Ý tưởng:
- Lấy ví dụ: k = 0
3 4 5 6 7 => 3 0 5 6 7
4 5 6 7 9 => 0 5 6 7 0
2 3 5 7 8 => 2 3 5 7 8
- Tìm lần lượt các phần tử là số chính phương của dãy, rồi thay thế bằng số
nguyên k.
- In kết quả.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
I,n,k: longint;
Begin
Read (n);read (k);
For i:=1 to n do read (a[i]);
For i:=1 to n do
If frac(sqrt(a[i])) = 0 then a[i]:=k;
For i:=1 to n do
Write (a[i], ‘ ‘);
Readln;
Readln;
End.
15. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử và số
nguyên k, thay thế số chính phương lớn nhất trong dãy bằng số k.
a. Ý tưởng:
- Lấy ví dụ: k=0
2 3 7 5 9 => 2 3 7 5 0
4 4 9 4 4=> 4 4 0 4 4
4 4 4 4 => 0 0 0 0
3 5 6 7 => 3 5 6 7
- Tìm kiếm số chính phương lớn nhất
- Thay thế số chính phương lớn nhất bằng số nguyên k
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Min,i,n,k:longint;
Begin
Read (n); read (k);
For i := 1 to n do read (a[i]);
Min:=a[1];
For i:=1 to n do
If (frac(sqrt(a[i]))=0) and (a[i] < min) then min:=a[i];
If frac(sqrt(min)) = 0 then
For i:=1 to n do if a[i] = min then a[i]:=k;
For i:=1 to n do
Write (a[i],’ ‘);
Readln.
End.
16. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử và số
nguyên k, thay thế số chính phương lớn nhỏ nhất trong dãy bằng số k.
a. Ý tưởng:
- Lấy ví dụ: k=0
2 3 7 5 9 => 2 3 7 5 0
4 4 9 4 4=> 0 0 9 0 0
4 4 4 4 => 4 4 4 4
3 5 6 7 => 3 5 6 7
- Tìm kiếm số chính phương nhỏ nhất
- Thay thế số chính phương nhỏ nhất bằng số nguyên k
b. Chương trình tham khảo:
var a:array [1..50] of longint;
min,i,n,k,dem:longint;
begin
read (n); read (k);
for i:=1 to n do read (a[i]);
min := a[1]; dem:=0;
for i:=1 to n do
if (frac(sqrt(a[i])) = 0) and (a[i] <= min) then
begin
min :=a[i];
dem:=dem+1;
end;
if dem=n then write ('khong co cp min') else
for i:=1 to n do
if a[i] = min then a[i]:=k;
if frac(sqrt(min)) = 0 then
for i:=1 to n do if dem <> n then
write (a[i],' ');
readln;
readln;
end.
17. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử và số
nguyên k, thay thế số chính phương xuất hiện nhiều nhất trong dãy
bằng số k.
a. Ý tưởng:
- Lấy ví dụ: k=0
2 1 1 1 9 9 => 2 0 0 0 9 9
2 2 1 1 4 4 => 2 2 0 0 0 0
1 1 1 1 1 1 => 0 0 0 0 0 0
- Đếm số phần tử chính phương xuất hiện nhiều nhất.
- Thay thế các phần tử đó bằng số k.
b. Chương trình tham khảo:
var a:array [1..50] of longint;
n,i,j,max,dem,k,z:longint;
begin
read (n);
read (k);
for i:=1 to n do read (a[i]);
max := 0;
for i:=1 to n do
if frac(sqrt(a[i])) = 0 then
begin
dem :=0;
for j:= i to n do
if a[i] = a[j] then dem:=dem+1;
if dem > max then max:= dem;
end;
if max = 1 then write ('khong co ptu xh nhieu nhat')
else
for i:=1 to n do
if frac(sqrt(a[i])) = 0 then
begin
dem:=0;
for j:=i to n do
if a[i] = a[j] then dem:=dem+1;
if dem > max then max:=dem;
if dem = max then
begin
writeln (max); writeln (a[i],' '); z:=a[i];
end;
for i:=1 to n do if a[i] = z then
a[i]:=k;
for i:=1 to n do write (a[i],' ');
Readln;
Readln;
End.
III. Bài tập về số hoàn hảo:
1. Nhập vào số nguyên n, tìm ước của n.
a. Ý tưởng:
- Lấy ví dụ: 6 có ước là 1,2,3,6
12 có ước là 1,2,3,4,6,12
Nhận xét: ước của n là n chia hết cho ước.
b. Chương trình tham khảo:
Program timuoc;
Var i,n:longint;
Begin
For i:=1 to n do
If n mod i = 0 then write (i);
Readln;
End.
2. Nhập vào số nguyên n, tìm tổng các ước của n.
a. Ý tưởng:
- Lấy ví dụ: 6 có ước là 1,2,3,6. Tổng = 12
12 có ước là 1,2,3,4,6,12. Tổng = 28
Nhận xét: Để tìm tổng các ước thì đầu tiên ta sẽ tìm ước của số đó rồi tính
tổng các ước.
b. Chương trình tham khảo:
Program timuoc;
Var i,n,tong:longint;
Begin
Readln (n);
Tong:=0;
For i:=1 to n do
If n mod i = 0 then tong:=tong+i;
Write (tong);
Readln;
End.
3. Nhập vào số nguyên n, tìm tổng các ước thực sự của n.
a. Ý tưởng:
- Lấy ví dụ: 6 có ước thực sự là 1,2,3.
Nhận xét: ước thực sự của n là n chia hết cho ước, không có n.
b. Chương trình tham khảo:
Program timuoc;
Var i,n,tong:longint;
Begin
Readln (n);
Tong:=0;
For i:=1 to n-1 do
If n mod i = 0 then write (i);
Readln;
End.
4. Nhập vào số nguyên n, kiểm tra n có phải là số hoàn hảo không?
a. Ý tưởng:
- Lấy ví dụ: 6 = 1+2+3
Nhận xét: số hoàn hảo là số có tổng các ước thực sự bằng chính nó.
- Để kiểm tra n có phải là số hoàn hảo không? Ta sẽ tìm ước thực sự của n
rồi cộng các ước thực sự lại, nếu tổng các ước thực sự bằng n thì n là số
hoàn hảo.
b. Chương trình tham khảo:
Program sohoanhao;
Var i,n,tong:longint;
Begin
Readln (n);
Tong:=0;
For i:=1 to n-1 do
If n mod i = 0 then tong:=tong+i;
If tong=n then write (n, ‘la so hoan hao’);
Readln;
End.
5. In ra số hoàn hảo nhỏ hơn 100.
a. Ý tưởng:
- số hoàn hảo là số có tổng các ước thực sự bằng chính nó.
- Vì tìm số hoàn hảo nhỏ hơn 100 nên ta sẽ sử dụng vòng lặp xác định for
…to … do đi từ 1 đến 100.
- Kiểm tra các số trong khoảng từ 1 đến 100 có số hoàn hảo không, nếu số
nào là số hoàn hảo thì in ra.
b. Chương trình tham khảo:
Program sohoanhao;
Var i,j,tong:longint;
Begin
For i:=1 to 100 do
begin
Tong:=0;
For j:=1 to i-1 do
If n mod i = 0 then tong:=tong+j;
If tong=i then write (i);
Readln;
End.
6, 28
6. In ra số hoàn hảo có hai chữ số.
a. Ý tưởng:
- số hoàn hảo là số có tổng các ước thực sự bằng chính nó.
- Vì tìm số hoàn hảo có hai chữ số nên ta sẽ sử dụng vòng lặp xác định for
…to … do đi từ 10 đến 100.
- Kiểm tra các số trong khoảng từ 10 đến 100 có số hoàn hảo không, nếu số
nào là số hoàn hảo thì in ra.
b. Chương trình tham khảo:
Program sohoanhao;
Var i,j,tong:longint;
Begin
For i:=10 to 100 do
begin
Tong:=0;
For j:=1 to i-1 do
If n mod i = 0 then tong:=tong+j;
If tong=i then write (i);
Readln;
End.
28
7. In ra số hoàn hảo là số chẵn nhỏ hơn 100.
a. Ý tưởng:
- số hoàn hảo là số có tổng các ước thực sự bằng chính nó.
- Vì tìm số hoàn hảo nhỏ hơn 100 nên ta sẽ sử dụng vòng lặp xác định for
…to … do đi từ 1 đến 100.
- Kiểm tra các số trong khoảng từ 1 đến 100 có số hoàn hảo không, nếu số
nào là số hoàn hảo và chia hết cho 2 thì in ra.
b. Chương trình tham khảo:
Program sohoanhao;
Var i,j,tong:longint;
Begin
For i:=1 to 100 do
begin
Tong:=0;
For j:=1 to i-1 do
If n mod i = 0 then tong:=tong+j;
If (tong=i) and (i mod 2 = 0) then write (i);
Readln;
End.
6, 28
8. In ra số hoàn hảo có hai chữ số là số chẵn.
a. Ý tưởng:
- số hoàn hảo là số có tổng các ước thực sự bằng chính nó.
- Vì tìm số hoàn hảo có hai chữ số nên ta sẽ sử dụng vòng lặp xác định for
…to … do đi từ 10 đến 100.
- Kiểm tra các số trong khoảng từ 10 đến 100 có số hoàn hảo không, nếu số
nào là số hoàn hảo và chia hết cho 2 thì in ra.
b. Chương trình tham khảo:
Program sohoanhao;
Var i,j,tong:longint;
Begin
For i:=10 to 100 do
begin
Tong:=0;
For j:=1 to i-1 do
If n mod i = 0 then tong:=tong+j;
If (tong=i) and (i mod 2 = 0) then write (i);
Readln;
End.
28
9. Nhập vào 2 số nguyên a,b (a<b) in ra các số hoàn hảo nằm trong khoảng
a,b.
a. Ý tưởng:
- số hoàn hảo là số có tổng các ước thực sự bằng chính nó.
- Vì tìm số hoàn hảo nằm trong khoảng a,b nên ta sẽ sử dụng vòng lặp xác
định for …to … do đi từ a đến b.
- Kiểm tra các số trong khoảng từ a đến b có số hoàn hảo không, nếu số
nào là số hoàn hảo thì in ra.
b. Chương trình tham khảo:
Program sohoanhao;
Var i,j,tong:longint;
Begin
Read (a,b);
For i:=a to b do
begin
Tong:=0;
For j:=1 to i-1 do
If n mod i = 0 then tong:=tong+j;
If (tong=i) and (i mod 2 = 0) then write (i);
Readln;
End.
10. Nhập vào số nguyên n, in ra số hoàn hảo lớn nhất, nhỏ hơn n.
a. Ý tưởng:
- Lấy ví dụ:
Nhập n = 60
KQ: 28
- Định nghĩa số hoàn hảo: số hoàn hảo là số có tổng các ước thực sự bằng
chính nó.
- Kiểm tra ngược từ n trở về trước 1 đơn vị, đến khi nào gặp số hoàn hảo
thì in kết quả.
- Vòng lặp không xác định.
b. Chương trình tham khảo:
Program Nguyento;
Var i:longint;
Begin
Write (‘nhap n‘);
Readln (n);
Repeat n:=n-1;
Tong:=0;
For i:=1 to n-1 do
If n mod i = 0 then tong:=tong+i;
If tong=n then write (n);
until tong= n;
Readldn
End.
11. Nhập vào số nguyên n, in ra số hoàn hảo nhỏ nhất, lớn hơn n.
a. Ý tưởng:
- Lấy ví dụ:
Nhập n = 12
KQ: 28
- Định nghĩa số hoàn hảo: số hoàn hảo là số có tổng các ước thực sự bằng
chính nó.
- Kiểm tra ngược từ n trở lên 1 đơn vị, đến khi nào gặp số hoàn hảo thì in
kết quả.
- Vòng lặp không xác định.
b. Chương trình tham khảo:
Program Nguyento;
Var i:longint;
Begin
Write (‘nhap n‘);
Readln (n);
Repeat n:=n+1;
Tong:=0;
For i:=1 to n-1 do
If n mod i = 0 then tong:=tong+i;
If tong=n then write (n);
until tong= n;
Readldn
End.
IV. Bài tập về số nguyên tố:
1. Cho số nguyên n, kiểm tra n có phải là số nguyên tố không?
a. Ý tưởng:
- Định nghĩa số nguyên tố: số nguyên tố là số chỉ chia hết cho 1 và chính
nó, ngoại trừ số 0 và số 1.
- Nếu n =0 hoặc n=1 thì in ra n không phải là số nguyên tố.
- Thực tế, một số có thể chia hết từ 1 đến số đó chia 2, do đó ta sẽ lấy n
chia lần lượt cho các số từ 1 đến n div 2 và đếm ước. Nếu ước = 0 thì n là
số nguyên tố.
b. Chương trình tham khảo:
Program Nguyento;
Var i,n,uoc: longint;
Begin
Read (n);
If (n=0) or (n=1) then write (n, ‘ko la so nguyen to’) else
Begin
Uoc:=0;
For i:=2 to n div 2 do
If n mod i = 0 then uoc:=uoc+1;
If uoc = 0 then write (n, ‘la so nguyen to’) else write (n,’ko nguyento’);
End;
Readln;
End.
2. In ra số nguyên tố nhỏ hơn 100.
a. Ý tưởng:
- Định nghĩa số nguyên tố: số nguyên tố là số chỉ chia hết cho 1 và chính
nó, ngoại trừ số 0 và số 1.
- Vì 0 và 1 ko là số nguyên tố nên ta sẽ tìm số nguyên tố từ 2 đến 100 và
sử dụng vòng lặp xác định for … to … do.
Đếm ước để tìm số nguyên tố bằng cách cho 1 vòng lặp j song song chạy
từ 2 đến số kiểm tra chia 2.Nếu ước bằng 0 thì in ra số nguyên tố.
b. Chương trình tham khảo:
Program Nguyento;
Var i,j,uoc: longint;
Begin
For i:=2 to 100 do
Begin
uoc:=0;
For j:=2 to i div 2 do
If i mod j = 0 then uoc:=uoc+1;
If uoc = 0 then writeln (i);
End;
Readln;
End.
3. In ra số nguyên tố có hai chữ số.
a. Ý tưởng:
- Định nghĩa số nguyên tố: số nguyên tố là số chỉ chia hết cho 1 và chính
nó, ngoại trừ số 0 và số 1.
- Vì 0 và 1 ko là số nguyên tố nên ta sẽ tìm số nguyên tố từ 2 đến 100 và
sử dụng vòng lặp xác định for … to … do.
Đếm ước để tìm số nguyên tố bằng cách cho 1 vòng lặp j song song chạy
từ 2 đến số kiểm tra chia 2.Nếu ước bằng 0 thì in ra số nguyên tố.
b. Chương trình tham khảo:
Program Nguyento;
Var i,j,uoc: longint;
Begin
For i:=10 to 100 do
Begin
uoc:=0;
For j:=2 to i div 2 do
If i mod j = 0 then uoc:=uoc+1;
If uoc = 0 then writeln (i);
End;
Readln;
End.
4. In ra số nguyên tố là số chẵn nhỏ hơn 100.
a. Ý tưởng:
* Tìm số nguyên tố:
- Định nghĩa số nguyên tố: số nguyên tố là số chỉ chia hết cho 1 và chính nó,
ngoại trừ số 0 và số 1.
- Vì 0 và 1 ko là số nguyên tố nên ta sẽ tìm số nguyên tố từ 2 đến 100 và sử
dụng vòng lặp xác định for … to … do.
Đếm ước để tìm số nguyên tố bằng cách cho 1 vòng lặp j song song chạy
từ 2 đến số kiểm tra chia 2.Nếu ước bằng 0 thì in ra số nguyên tố.
* Kiểm tra số đó có phải số chẵn không?
Số chẵn là số chia hết cho 2.
b. Chương trình tham khảo:
Program Nguyento;
Var i,j,uoc: longint;
Begin
For i:=2 to 100 do
Begin
uoc:=0;
For j:=2 to i div 2 do
If i mod j = 0 then uoc:=uoc+1;
If (uoc = 0) and (i mod 2 = 0) then writeln (i);
End;
Readln;
End.
5. In ra số nguyên tố có hai chữ số là số chẵn.
a. Ý tưởng:
- Tìm số nguyên tố có hai chữ số.
- Kiểm tra số nguyên tố vừa tìm có phải là số chẵn không?
b. Chương trình tham khảo:
Program Nguyento;
Var i,j,uoc,n: longint;
Begin
For i:=10 to 100 do
Begin
uoc:=0;
For j:=2 to i div 2 do
If i mod j = 0 then uoc:=uoc+1;
If (uoc = 0) and (i mod 2 = 0) then writeln (i);
End;
Readln;
End.
6. Nhập số nguyên n, in ra các số nguyên tố nhỏ hơn n.
a. Ý tưởng:
- Tương tự tìm số nguyên tố nhỏ hơn 100.
b. Chương trình tham khảo:
Program Nguyento;
Var i,j,uoc: longint;
Begin
Read (n);
For i:=2 to n-1 do
Begin
uoc:=0;
For j:=2 to i div 2 do
If i mod j = 0 then uoc:=uoc+1;
If uoc = 0 then writeln (i);
End;
Readln;
End.
7. Nhập vào 2 số nguyên a,b (a<b) in ra các số nguyên tố nằm trong
khoảng a,b.
a. Ý tưởng:
- Vì cần tìm số nguyên tố trong khoảng a,b nên ta sẽ tìm từ a đến b và sử
dụng vòng lặp xác định for … to … do.
Đếm ước để tìm số nguyên tố bằng cách cho 1 vòng lặp j song song chạy
từ 2 đến số kiểm tra chia 2.Nếu ước bằng 0 thì in ra số nguyên tố.
b. Chương trình tham khảo:
Program Nguyento;
Var i,j,uoc: longint;
Begin
Read (a,b);
For i:=a to b do
Begin
uoc:=0;
For j:=2 to i div 2 do
If i mod j = 0 then uoc:=uoc+1;
If uoc = 0 then writeln (i);
End;
Readln;
End.
8. Nhập vào số nguyên n, in ra số nguyên tố lớn nhất, nhỏ hơn n.
a. Ý tưởng:
- Lấy ví dụ:
Nhập n = 60
KQ: 59
- Kiểm tra ngược từ n trở về trước 1 đơn vị, đến khi nào gặp số nguyên tố
thì in kết quả.
- Vì số vòng lặp không xác định được bao nhiêu lần nên ta sử dụng vòng
lặp không xác định repeat … until …
b. Chương trình tham khảo:
Program Nguyento;
Var i,n,uoc:longint;
Begin
Write (‘nhap n‘);
Readln (n);
Repeat n:=n-1;
Uoc=0;
For i:=2 to n div 2 do
If n mod i = 0 then uoc:=uoc+1;
If uoc=0 then write (n);
until uoc=0;
Readldn
End.
9. Nhập vào số nguyên n, in ra số nguyên tố nhỏ nhất, lớn hơn n.
a. Ý tưởng:
- Lấy ví dụ:
Nhập n = 60
KQ: 61
- Kiểm tra ngược từ n trở lên 1 đơn vị, đến khi nào gặp số nguyên tố thì in
kết quả.
- Vì số vòng lặp không xác định được bao nhiêu lần nên ta sử dụng vòng
lặp không xác định repeat … until …
b. Chương trình tham khảo:
Program Nguyento;
Var i,n,uoc:longint;
Begin
Write (‘nhap n‘);
Readln (n);
Repeat n:=n+1;
Uoc=0;
For i:=2 to n div 2 do
If n mod i = 0 then uoc:=uoc+1;
If uoc=0 then write (n);
until uoc=0;
Readldn
End.
II. Mảng 1 chiều về số nguyên tố:
///////////////// THUẬT TOÁN TÌM KIẾM ///////////////////////////////
10. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra
các phần tử nguyên tố.
a. Ý tưởng:
- Lấy ví dụ:
3 4 4 6 8 => 3
3 6 4 5 => 3 5
4 3 4 5 5 => 3 5 5
3 3 3 3 3 => 3 3 3 3 3
1 1 1 1 1 => khong co phan tu la so nguyen to
4 4 4 4 4 => khong co phan tu la so nguyen to
2 6 8 4 6 => khong co phan tu la so nguyen to
- Nhập 1 dãy số nguyên a gồm n phần tử.
- Kiểm tra các phần tử của dãy a. Nếu phần tử nào là số nguyên tố thì in
phần tử đó ra.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
I,dem,uoc,n:longint;
Begin
Read (n);
Write (‘nhap mang a: ‘);
For i:=1 to n do
Read(a[i],’ ‘);
Dem:=0;
For i:=1 to n do
Begin
Uoc:=0;
For j:=2 to a[i] div 2 to
If a[i] mod j = 0 then uoc:=uoc+1;
If (uoc=0) and (a[i]>1) then
Begin
write (a[i],’ ‘); dem:=dem+1;
end;
end;
if dem = 0 then write (‘ko co so nguyen to’);
Readln.
End.
11. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra
các phần tử là số nguyên tố và vị trí của nó.
a. Ý tưởng:
- Lấy ví dụ:
3 4 4 6 8 => 3 vi tri 1
3 6 4 5 => 3 vi tri 1, 5 vi tri 4
4 3 4 5 5 => 3 vi tri 2, 5 vi tri 4, 5 vi tri 5
3 3 3 3 3 => 3 vitri1, 3 vitri 2, 3 vitri 3, 3 vitri 4, 3 vitri 5
1 1 1 1 1 => khong co phan tu la so nguyen to
4 4 4 4 => khong co phan tu la so nguyen to
6 8 4 6 => khong co phan tu la so nguyen to
- Nhập 1 dãy số nguyên a gồm n phần tử.
- Kiểm tra các phần tử của dãy a. Nếu phần tử nào là số nguyên tố thì in
phần tử đó và vị trí của nó.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
I,dem,uoc,n:longint;
Begin
Read (n);
Write (‘nhap mang a: ‘);
For i:=1 to n do
Read(a[i],’ ‘);
Dem:=0;
For i:=1 to n do
Begin
Uoc:=0;
For j:=2 to a[i] div 2 to
If a[i] mod j = 0 then uoc:=uoc+1;
If (uoc=0) and (a[i]>1) then
Begin
write (a[i],’ ‘,’vitri’,’ ‘,i); dem:=dem+1;
end;
end;
if dem = 0 then write (‘ko co so nguyen to’);
Readln.
End.
12. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra
phần tử là số nguyên tố lớn nhất trong dãy.
a. Ý tưởng:
- Lấy ví dụ:
2 3 1 7 5 => 7
7 7 7 7 7 => 7
6 6 6 6 6 => khong co so nguyên tố.
1 1 1 1 1 => khong co so nguyen to
- Tìm kiếm số nguyên tố
- So sánh từng phần tử là số nguyên tố trong mảng, tìm ra số lớn nhất. bằng
cách lấy phần tử max là 0, so sánh max với các phần tử nguyên còn lại,
phần tử nào lớn hơn max thì gán max là phần tử đó. Kiểm tra max có phải
số nguyên tố không và In kết quả là max.
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,j,n:longint;
Begin
Read (n);
For i := 1 to n do read (a[i]);
Max:=0;
For i:=1 to n do
begin
Uoc := 0;
For j:=1 to a[i] div 2 do
Begin
If a[i] mod j = 0 then uoc:=uoc+1;
If (uoc =0 ) and (max < = a[i]) then max:=a[i];
End;
For j:=1 to a[i] div 2 do
If (max mod j <> 0) and (max >a[i]) then write (max);
End;
Readln.
End.
13. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra
phần tử là số nguyên tố nhỏ nhất trong dãy.
a. Ý tưởng:
- Lấy ví dụ:
2 3 1 7 5 => 5
7 7 7 7 7 => không co so nguyen to nho nhat
6 6 6 6 6 => khong co so nguyên tố.
1 1 1 1 1 => khong co so nguyen to
- Tìm kiếm số nguyên tố
- So sánh từng phần tử là số nguyên tố trong mảng, tìm ra số lớn nhất. bằng
cách lấy phần tử min là 0, so sánh min với các phần tử nguyên còn lại,
phần tử nào nhỏ hơn min thì gán in là phần tử đó. Kiểm tra min có phải là
số nguyên tố không và in kết quả là min.
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Min,i,j,n:longint;
Begin
Read (n);
For i := 1 to n do read (a[i]);
Min:=0; dem:=0;
For i:=1 to n do
begin
Uoc := 0; if a[i] > 2 then
For j:=1 to a[i] div 2 do
Begin
If a[i] mod j = 0 then uoc:=uoc+1;
If (uoc =0 ) and (min > a[i]) then min:=a[i];
End;
For i:=1 to n do
If min = a[i] then dem:=dem+1;
If (dem =0) or (dem = n) then write (‘khong co min’) else write (min);
End;
Readln.
End.
14. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In ra
phần tử là số nguyên tố lớn nhất trong dãy và vị trí của nó.
a. Ý tưởng:
- Lấy ví dụ:
2 3 1 7 5 => 7 vitri 4
7 7 7 7 7 => 7 vitri 1, 7 vitri 2, 7 vitri 3, 7 vitri 4, 7 vitri 5,
6 6 6 6 6 => khong co so nguyên tố.
1 1 1 1 1 => khong co so nguyen to
- Tìm kiếm số nguyên tố
- So sánh từng phần tử là số nguyên tố trong mảng, tìm ra số lớn nhất. bằng
cách lấy phần tử max là 0, so sánh max với các phần tử nguyên còn lại,
phần tử nào lớn hơn max thì gán max là phần tử đó. In kết quả là max và
vị trí của nó.
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,j,n:longint;
Begin
Read (n);
For i := 1 to n do read (a[i]);
Max:=0;
For i:=1 to n do
begin
Uoc := 0;
For j:=1 to a[i] div 2 do
Begin
If a[i] mod j = 0 then uoc:=uoc+1;
If (uoc =0 ) and (max < = a[i]) then max:=a[i];
End;
For j:=1 to a[i] div 2 do
If (max mod j <> 0) and (max >a[i]) then
For i:=1 to n do if a[i] = max then write (a[i],’ ‘,vitri,’ ‘,i);
End;
Readln.
End.
///////////////// THUẬT TOÁN SẮP XẾP ///////////////////////////////
15. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. Sắp
xếp mảng theo thứ tự tăng dần.
a. Ý tưởng:
- Lấy ví dụ: 93742 => 2 3 4 7 9
74833 => 3 3 4 7 8
11111 => 1 1 1 1 1
00 0 0 0 0
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,n,tg:longint;
Begin
Read (n);
For i := 1 to n do read (a[i]);
For i:=i to n-1 do
Begin
For j:=i+1 to n do
If a[j] < a[i] then
begin
tg:=a[i]; a[i]:=a[j]; a[j] :=tg;
end;
for i:=1 to n do
write (a[i],’ ‘);
Readln.
End.
16. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. Sắp
xếp các số nguyên tố theo thứ tự tăng dần, các số còn lại vẫn giữ
nguyên vị trí.
a. Ý tưởng:
- Lấy ví dụ:
2 1 9 7 3 4 => 2 1 9 3 7 4
Tìm các phần tử là số nguyên tố, so sánh chúng với nhau. Đổi chỗ để
được trật tự đúng.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
I,dem,uoc,n:longint;
Begin
Read (n);
Write (‘nhap mang a: ‘);
For i:=1 to n do
Read(a[i],’ ‘);
Dem:=0;
For i:=1 to n do
Begin
Uoc:=0;
For j:=2 to a[i] div 2 to
If a[i] mod j = 0 then uoc:=uoc+1;
If (uoc=0) and (a[i]>2) then
dem:=dem+1;
if dem = 0 then write (‘ko co so nguyen to’);
For i:=1 to n-1 do
Begin
If frac(sqrt(a[i])) = 0 then
For j:=i+1 to n do
If a[j] < a[i] then
begin
tg:=a[i]; a[i]:=a[j]; a[j] :=tg;
end;
end;
for i:=1 to n do
write (a[i],’ ‘);
Readln.
End.
Tuần 3 (09/12/2019 – 16/12/2019)
V. Bài tập về tổng các chữ số:
1. Nhập vào số nguyên n, in ra các chữ số của n.
a. Ý tưởng:
- Lấy ví dụ: n = 3421 => 1 2 4 3
Nhận xét: nếu chia 3421 cho 10 thì được 342 dư 1
Nếu chia 342 cho 10 thì được 34 dư 2
Nếu chia 34 cho 10 thì được 3 dư 4
Nếu chia 3 cho 10 thì được 0 dư 3
- Để in các chữ số của n, ta lấy n chia cho 10 được phần dư là các chữ số
của n.
- Xét n trong trường hợp n khác 0.
b. Chương trình tham khảo:
Var n,t:longint;
Begin
Read (n);
While (n<>0) do
Begin
T:=n mod 10;
Write (t);
N := n div 10;
End;
Readln;
End.
2. Nhập vào số nguyên n, tính tổng các chữ số của n.
a. Ý tưởng:
- Lấy ví dụ: n = 3421 => tổng = 10
- Tách các chữ số của n, ta lấy n chia cho 10 được phần dư là các chữ số
của n rồi cộng lần lượt các chữ số đó lại.
b. Chương trình tham khảo:
Var n,t,s:longint;
Begin
Read (n);
S:=0;
While (n<>0) do
Begin
T:=n mod 10;
S:=s+t;
N := n div 10;
End;
Write (s);
Readln;
End.
3. Nhập vào số nguyên n, in ra chữ số của n là số lẻ.
a. Ý tưởng:
- Lấy ví dụ: n = 3421 => 1 3
- Tách các chữ số của n, ta lấy n chia cho 10 được phần dư là các chữ số
của n rồi chia lần lượt các chữ số đó cho 2, chữ số nào không chia hết cho
2 là số lẻ, in ra.
b. Chương trình tham khảo:
Var n,t:longint;
Begin
Read (n);
While (n<>0) do
Begin
T:=n mod 10;
If t mod 2 <> 0 then write (t);
N := n div 10;
End;
Readln;
End.
4. Nhập vào số nguyên n, in ra chữ số lớn nhất của n.
a. Ý tưởng:
- Lấy ví dụ: n = 3421 => 4
- Tách các chữ số của n, ta lấy n chia cho 10 được phần dư là các chữ số
của n rồi so sánh các chữ số đó với nhau, số nào lớn nhất sẽ in ra.
b. Chương trình tham khảo:
Var n,t,max:longint;
Begin
Read (n);
Max:=0;
While (n<>0) do
Begin
T:=n mod 10;
If max<t then max:=t;
N := n div 10;
End;
Write (max);
Readln;
End.
5. Nhập vào số nguyên n, in ra chữ số nhỏ nhất của n.
a. Ý tưởng:
- Lấy ví dụ: n = 3421 => 1
- Gán min là giá trị được tách đầu tiên.
- Tách các chữ số của n, ta lấy n chia cho 10 được phần dư là các chữ số
của n rồi so sánh các chữ số đó với min, số nào nhỏ nhất sẽ in ra.
b. Chương trình tham khảo:
Var n,t,min:longint;
Begin
Read (n);
Max:=n mod 10; n := n div 10;
While (n<>0) do
Begin
T:=n mod 10;
If min>t then min:=t;
N := n div 10;
End;
Write (min);
Readln;
End.
6. Nhập vào số nguyên n, in ra số chính phương từ 1 đến n có tổng các chữ
số là số lẻ.
a. Ý tưởng:
- Lấy ví dụ: 9, 67, …
- Tìm số chính phương
- Tách các chữ số của số chính phương
- Kiểm tra tổng của các chữ số của số chính phương có phải số lẻ không.
b. Chương trình tham khảo:
Uses crt;
Var i,k,t,n,tong:longint;
Begin
Clrscr;
Read (n);
For i:=1 to n do
Begin
Tong:=0; k:=i;
If frac(sqrt(k))=0 then
Begin
While k<>0 do
Begin
T:=k mod 10;
Tong:=tong+t;
k:=k div 10;
end;
if tong mod 2 <> 0 then write (i, ‘ ‘);
end;
end;
Readln;
Readln;
end.
7. Nhập vào số nguyên n, in ra số chính phương có hai chữ số, có tổng các
chữ số là số chẵn.
a. Ý tưởng:
- Lấy ví dụ:
- Tìm số chính phương
- Tách các chữ số của số chính phương
- Kiểm tra tổng của các chữ số của số chính phương có phải số chẵn không.
b. Chương trình tham khảo:
Uses crt;
Var i,k,t,n,tong:longint;
Begin
Clrscr;
Read (n);
For i:=10 to n do
Begin
Tong:=0; k:=i;
If frac(sqrt(k))=0 then
Begin
While k<>0 do
Begin
T:=k mod 10;
Tong:=tong+t;
k:=k div 10;
end;
if tong mod 2 = 0 then write (i, ‘ ‘);
end;
end;
Readln;
Readln;
end.
8. Nhập vào số nguyên n, in ra chữ số của n là số nguyên tố.
a. Ý tưởng:
- Lấy ví dụ: n = 3421 => 2 3
- Tách các chữ số của n, ta lấy n chia cho 10 được phần dư là các chữ số
của n rồi kiểm tra các chữ số đó, số nào là số nguyên tố thì in ra.
b. Chương trình tham khảo:
Var n,t,I,uoc:longint;
Begin
Read (n);
While (n<>0) do
Begin
T:=n mod 10;
uoc:=0;
For i:=2 to t div 2 do
If t mod i = 0 then uoc:=uoc+1;
If uoc=0 then write (t);
N := n div 10;
End;
Readln;
End.
VI. Bài tập về UCLN, BCNN:
1. Nhập vào 2 số a,b. Tìm UC của 2 số a,b.
a. Ý tưởng:
- Lấy ví dụ: UC (10,20) = 1, 2, 5, 10
- Lấy a chia lần lượt cho các số từ 1 đến a, nếu a cho hết cho 1 số và b chia
hết cho 1 số thì số đó là ước của a và b.
b. Chương trình tham khảo:
Var a,b,i:longint;
Begin
Read (a,b);
For i:=1 to a do
If (a mod i =0) and (b mod i = 0) then write (i,’ ‘);
Readln;
End.
2. Nhập vào 2 số a,b. Tìm UCLN của 2 số a,b.
a. Ý tưởng:
- Lấy ví dụ: UCLN (10,20) = 10
- Lấy a chia lần lượt cho các số từ 1 đến a, nếu a cho hết cho 1 số và b chia
hết cho 1 số thì số đó là ước của a và b, lưu ước chung vào 1 biến, chọn
ước chung cuối cùng là ước chung lớn nhất.
b. Chương trình tham khảo:
Var a,b,i,t:longint;
Begin
Read (a,b,c,d);
For i:=1 to a do
If (a mod i =0) and (b mod i = 0) then t:=i;
Write (t);
Readln;
End.
3. Nhập vào các số nguyên a,b,c,d. Rút gọn các phân số a/b, c/d rồi tính
tổng a/b + c/d
a. Ý tưởng:
- Lấy ví dụ: a= 8, b = 12, c = 3, d=9 (b,d # 0)
- Tìm ước chung lớn nhất của a và b để rút gọn phân số a/b, tìm ước chung
lớn nhất của c và d để rút gọn phân số c/d.
- Tính tổng.
b. Chương trình tham khảo:
var a,b,c,d,i,t,x,y,z:longint;
Begin
Read (a,b,c,d);
For i:=1 to a do
If (a mod i =0) and (b mod i = 0) then t:=i;
a:=round(a/t);
b:=round(b/t);
for i:=1 to c do
if (c mod i = 0) and (d mod i = 0) then z:=i;
c:=round(c/z);
d:=round(d/z);
x:=a*d + c*b;
y:=b*d;
write ('tong','=',x,'/',y);
Readln;
readln;
end.;
4. Nhập vào n, tìm bội của n (giới hạn n bình phương)
a. Ý tưởng:
- Lấy ví dụ: bội của 2 = 2,4,6,8,….
- Lấy n nhân lần lượt với các số từ 1 đến n bình phương, ta được bội của n.
b. Chương trình tham khảo:
Var n,i,b:longint;
Begin
Read (n);
For i:=1 to sqr(n) do
begin
B:=n*i;
Write (b);
End;
Readln;
End.
5. Nhập vào 2 số a,b. Tìm BCNN của 2 số a,b.
a. Ý tưởng:
- Lấy ví dụ: B(8,12)=
- Theo công thức Euclide BCNN(a,b) = a*b/UCLN(a,b)
Với a<>b
b. Chương trình tham khảo:
Var a,b,si,t:longint;
Begin
Read (a,b);
K:=a*b;
While a<> b do begin
If a>b then a:= a-b else b:=b-a;
BCNN := k/a;
End;
Write (BCNN);
Readln;
End.
Tuần 4 (16/12/2019 – 21/12/2019)
VII. Bài tập về giai thừa:
1. Nhập vào số nguyên n, tính n giai thừa.
a. Ý tưởng:
3 Lấy ví dụ: 7! = 1*2*3*4*5*6*7
b. Chương trình tham khảo:
Var
Begin
Read (n); p:=1;
For i:=1 to n do
P:= P*i;
Write (p);
Readln.
End.
VIII. Bài tập về lũy thừa.
1. Nhập vào số thực a, số nguyên x. Tính a mũ x.
a. Ý tưởng:
4 Lấy ví dụ: 32 = 3*3
b. Chương trình tham khảo:
Var a,x,i,LT:longint;
Begin
Read (a,x);
LT=1;
For i:=1 to x do
LT:=LT*a;
Write (LT);
Readln.
End.
IX. Hàm và thủ tục:
1. Viết hàm số nguyên tố
Function snt(n:longint):boolean;
Var I,n:longint;
Begin
If i< 2 then snt:=false;
For i:=1 to n div 2 do
If n mod i = 0 then
Begin
Exit;
snt:=false;
End;
End;
2. Viết hàm số chính phương
Function scp(n:longint): boolean;
Begin
If n < 0 then scp := false;
If frac(sqrt(n)) <> 0 then scp := false;
End;
3. Hàm tính tổng các chữ số
Function tongccs(n:longint): longint;
t,n,tong:longint;
Begin
While (n<>0) do
Begin
t:=n mod 10;
tong:=tong+t;
n:=n div 10;
End;
tongccs := tong;
End;
4. Hàm tính giai thừa
Function gthua(n:longint):longint;
Var p,i:longint;
begin
p:=1;
For i:=1 to n do
p:= p*i;
gthua:=p;
end;
5. Hàm tính lũy thừa
Function luythua(a:real,x:longint):longint;
Var i:longint;
Begin
LT=1;
For i:=1 to x do
LT:=LT*a;
Luythua:=LT;
End;
6. Hàm ước chung lớn nhất của 2 số a,b
Function ucln(a,b:longint):longint;
Var z,i:longint;
begin
For i:=1 to a do
If (a mod i =0) and (b mod i = 0) then z:=i;
ucln:=z;
End;
7. Hàm bội chung nhỏ nhất của 2 số a,b
Function bcnn(a,b:longint):longint;
Var k:longint;
Begin
k:=a*b;
While a<> b do begin
If a>b then a:= a-b else b:=b-a;
bcnn:= k/a;
end;
8. Nhập vào mảng a gồm n phần tử, tìm tất cả các phần tử là nguyên tố
cùng nhau (UCLN =1)
9. In ra các số nguyên tố có 3 chữ số mà sau khi bớt đi một chữ số ở hàng
đơn vị thì nó cũng là số nguyên tố (siêu nguyên tố)
10. In ra các số chính phương có 3 chữ số mà tổng các chữ số của nó
là số nguyên tố.
11. Bài tập tổng hợp:
1. Nhập vào số nguyên n. In ra số chính phương nhỏ hơn n, có tổng các
chữ số là số nguyên tố.
a. Ý tưởng:
b. Chương trình tham khảo:
2. In ra số chính phương có hai chữ số, có tổng các chữ số là số nguyên tố.
3. Nhập vào số nguyên n. In ra số nguyên tố nhỏ hơn n, có tổng các chữ số
là số chính phương.
4. In ra số nguyên tố có hai chữ số, có tổng các chữ số là số chính phương.
5. In ra số chính phương, có tổng các chữ số là số chẵn.
B. Dãy số
Fibonacci
5 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra vị trí các phần tử chẵn lớn nhất.
a. Ý tưởng:
6 Lấy ví dụ:
87324 => 8
11111 => khong co phan tu chan
88888 => 8
22388 => 8
00000 => 0
7 Tìm phần tử chẵn
8 So sánh từng phần tử chẵn trong mảng, tìm ra phần tử chẵn lớn nhất.
bằng cách lấy phần tử max là 0, so sánh max với các phần tử chẵn
trong mảng, phần tử chẵn nào lớn hơn max thì gán max là phần tử đó.
In kết quả là max.
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,n:longint;
Begin
Read (n);
For I := 1 to n do read (n);
Max:=a[1];
For i:=2 to n do
If a[i] > max then max:=a[i];
Write (max);
Readln.
End.
9
10 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra các phần tử chẵn.
a. Ý tưởng:
11 Lấy ví dụ:
3 4 5 7 9 => 4
1 2 3 4 5 => 2 4
2 3 4 5 4 => 2 4 4
2 2 2 2 2 => 2 2 2 2 2
1 1 1 1 1 => khong co phan tu la so chan
1 3 5 7 9 => khong co phan tu la so chan
12 Nhập 1 dãy số nguyên a gồm n phần tử.
13 Kiểm tra các phần tử của dãy a. Nếu phần tử nào là số chẵn thì in ra.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
n,i,dem: longint;
Begin
Read (n);
Write (‘nhap mang a: ‘);
For i:=1 to n do
Read(a[i],’ ‘);
Dem:=0;
For i:=1 to n do
If a[i] mod 2 = 0 then
Begin
write (a[i],’ ‘);
dem:=dem+1;
end;
if dem = 0 then write (‘khong co phan tu la so chan’);
Readln.
End.
14 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra vị trí các phần tử chẵn.
c. Ý tưởng:
15 Lấy ví dụ:
3 4 5 7 9 => 2
1 2 3 4 5 => 2 4
2 3 4 5 4 => 1 3 5
2 2 2 2 2 => 1 2 3 4 5
1 1 1 1 1 => khong co phan tu la so chan
1 3 5 7 9 => khong co phan tu la so chan
16 Nhập 1 dãy số nguyên a gồm n phần tử.
17 Kiểm tra các phần tử của dãy a. Nếu phần tử nào là số chẵn thì in ra vị
trí của phần tử đó.
d. Chương trình tham khảo:
Var a:array[1..50] of longint;
Dem,n,i: longint;
Begin
Read (n);
Write (‘nhap mang a: ‘);
For i:=1 to n do
Read(a[i],’ ‘);
Dem:=0;
For i:=1 to n do
If a[i] mod 2 = 0 then
Begin
write (i,’ ‘); dem :=dem+1;
end;
if dem = 0 then write (‘ko co phan tu chan’);
Readln.
End.
18 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra các phần tử chẵn và vị trí của nó.
c. Ý tưởng:
19 Lấy ví dụ:
34579 => 4 vi tri 2
12345 => 2 vi tri 2; 4 vi tri 4
23454 => 2 vi tri 1; 4 vi tri 4; 4 vi tri 5
22222 => 2 vi tri 1; 2 vi tri 2; 2 vi tri 3; 2 vi tri 4; 2 vi tri 5
11111 => khong co phan tu la so chan
13579 => khong co phan tu la so chan
20 Nhập 1 dãy số nguyên a gồm n phần tử.
21 Kiểm tra các phần tử của dãy a. Nếu phần tử nào là số chẵn thì in phần
tử đó và vị trí của nó.
d. Chương trình tham khảo:
Var a:array[1..50] of longint;
Dem,n,i: longint;
Begin
Read (n);
For i:=1 to n do
Read(a[i],’ ‘);
Dem:=0;
For i:=1 to n do
If a[i] mod 2 = 0 then
Begin
writeln (a[i],’vi tri ‘,i); dem:=dem+1;
end;
if dem = 0 then write (‘khong co phan tu chan);
Readln.
End.
22 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra tổng các phần tử của dãy.
a. Ý tưởng:
23 Lấy ví dụ:
0 0 0 0 0 0
0 1 2 3 4 5
-1 -2 -3 -3 -5 -6
-1 -2 -3 0 1 2
0 0 0 0 0 -1
24 Nhập 1 dãy số nguyên a gồm n phần tử.
25 Tính tổng các phần tử có trong dãy.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
n,i,s: longint;
Begin
Read (n);
For i:=1 to n do
Read(a[i],’ ‘);
S:=0;
For i:=1 to n do
S:=s+a[i];
Write (s);
Readln.
End.
26 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử.
Đếm số phần tử chẵn có trong dãy.
a. Ý tưởng:
27 Lấy ví dụ:
12345 => 2
13579 =>0
00000 =>5
24682 => 5
11111 => 0
22222 => 5
28 Nhập 1 dãy số nguyên a gồm n phần tử.
29 Tìm phần tử chẵn.
30 Đếm số phần tử chẵn có trong dãy.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
N,i,dem: longint;
Begin
Read (n);
For i:=1 to n do
Read(a[i],’ ‘);
Dem:=0;
For i:=1 to n do
If a[i] mod 2 = then dem:=dem+1;
Write (dem);
Readln.
End.
31 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra phần tử lớn nhất trong dãy.
c. Ý tưởng:
32 Lấy ví dụ:
23756 => 7
11111 => 1
33 So sánh từng phần tử trong mảng, tìm ra số lớn nhất. bằng cách lấy
phần tử thứ nhất là max, so sánh max với các phần tử còn lại, phần tử
nào lớn hơn max thì gán max là phần tử đó. In kết quả là max.
d. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,n:longint;
Begin
Read (n);
For I := 1 to n do read (n);
Max:=a[1];
For i:=2 to n do
If a[i] > max then max:=a[i];
Write (max);
Readln.
End.
34 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra phần tử nhỏ nhất trong dãy.
c. Ý tưởng:
35 Lấy ví dụ:
23756 => 2
11111 => khong co phan tu nho nhat
23982 => 2
36 So sánh từng phần tử trong mảng, tìm ra phần tử nhỏ nhất. bằng cách
lấy phần tử thứ nhất là min, so sánh min với các phần tử còn lại, phần
tử nào nhỏ hơn min thì gán min là phần tử đó. In kết quả là min.
d. Chương trình tham khảo:
Var a:array [1..50] of longint;
Min,i,n,dem:longint;
Begin
Read (n);
For i:= 1 to n do read (n);
Min:=a[1]; dem:=0;
For i:=2 to n do
Begin
If a[i] < min then min:=a[i];
If a[i] = min then dem :=dem+1;
end;
if dem= n then write (‘khong co phan tu nho nhat’) else write (min);
Readln.
End.
37 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra phần tử lớn nhất trong dãy và vị trí của nó.
e. Ý tưởng:
38 Lấy ví dụ:
23756 => 7
11111 => 1
39 So sánh từng phần tử trong mảng, tìm ra số lớn nhất. bằng cách lấy
phần tử thứ nhất là max, so sánh max với các phần tử còn lại, phần tử
nào lớn hơn max thì gán max là phần tử đó. In kết quả là max và vị trí
của nó.
f. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,n:longint;
Begin
Read (n);
For I := 1 to n do read (n);
Max:=a[1];
For i:=2 to n do
If a[i] > max then max:=a[i];
For i:=1 to n do
If a[i] = max then write (a[i], ‘vi tri’, i);
Readln.
End.
40 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra vị trí các phần tử chẵn lớn nhất.
c. Ý tưởng:
41 Lấy ví dụ:
87324 => 8
11111 => khong co phan tu chan
88888 => 8
22388 => 8
00000 => 0
42 Tìm phần tử chẵn
43 So sánh từng phần tử chẵn trong mảng, tìm ra phần tử chẵn lớn nhất.
bằng cách lấy phần tử max là 0, so sánh max với các phần tử chẵn
trong mảng, phần tử chẵn nào lớn hơn max thì gán max là phần tử đó.
In kết quả là max.
d. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,n:longint;
Begin
Read (n);
For I := 1 to n do read (n);
Max:=a[1];
For i:=2 to n do
If a[i] > max then max:=a[i];
Write (max);
Readln.
End.
44 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. Sắp
xếp mảng theo thứ tự chẵn 1 hàng, lẻ 1 hàng.
a. Ý tưởng:
45 Lấy ví dụ:
2 3 4 5 6 7 => 2 4 6
3 5 7
1 1 1 1 1 1 => 1 1 1 1 1 1
2 2 2 2 2 2 => 2 2 2 2 2 2
3 3 3 3 4 5 => 3 3 3 3 5
4
46 Nhập vào các phần tử của mảng.
47 Kiểm tra lần lượt các phần tử của mảng. nếu là phần tử chẵn thì in ra.
Sau đó xuống dòng, trở về vị trí ban đầu, kiểm tra lần lượt các phần tử
của mảng, nếu phần tử là số lẻ thì in ra.
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
I,n:longint;
Begin
Read (n);
For i:=1 to n do
Read (a[i]);
For i:=1 to n do
If a[i] mod 2 = 0 then write (a[i],’ ‘); writeln;
For i:=1 to n do
If i mod 2 <> then write (a[i],’ ‘);
Readln.
End.
48 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. Sắp
xếp mảng theo thứ tự tăng dần.
c. Ý tưởng:
49 Lấy ví dụ: 93742 => 2 3 4 7 9
74833 => 3 3 4 7 8
11111 => 1 1 1 1 1
00000 => 0 0 0 0 0
d. Chương trình tham khảo:
Var a:array [1..50] of longint;
Max,i,n,tg:longint;
Begin
Read (n);
For i := 1 to n - 1 do read (n);
For i:=i+1 to n do
For j:=i-1 to n do
If a[j] < a[i] then
begin
tg:=a[i]; a[i]:=a[j]; a[j] :=tg;
end;
for i:=1 to n do
write (a[i],’ ‘);
Readln.
End.
50 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. Sắp
xếp mảng theo thứ tự chẵn 1 hàng, lẻ 1 hàng.
c. Ý tưởng:
51 Lấy ví dụ:
2 3 4 5 6 7 => 2 4 6
3 5 7
1 1 1 1 1 1 => 1 1 1 1 1 1
2 2 2 2 2 2 => 2 2 2 2 2 2
3 3 3 3 4 5 => 3 3 3 3 5
4
52 Nhập vào các phần tử của mảng.
53 Kiểm tra lần lượt các phần tử của mảng. nếu là phần tử chẵn thì in ra.
Sau đó xuống dòng, trở về vị trí ban đầu, kiểm tra lần lượt các phần tử
của mảng, nếu phần tử là số lẻ thì in ra.
d. Chương trình tham khảo:
Var a:array [1..50] of longint;
I,n:longint;
Begin
Read (n);
For i:=1 to n do
Read (a[i]);
For i:=1 to n do
If a[i] mod 2 = 0 then write (a[i],’ ‘); writeln;
For i:=1 to n do
If i mod 2 <> then write (a[i],’ ‘);
Readln.
End.
54 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra các phần tử có giá trị khác nhau, mỗi phần tử in một lần.
a. Ý tưởng:
55 Lấy ví dụ:
1 2 3 4 5 6 => 1 2 3 4 5 6
1 1 2 2 3 3 => 1 2 3
1 2 3 1 2 2 => 1 2 3
1 1 1 1 1 1 => 1
56 Nhập dãy số nguyên a gồm n phần tử.
57 Đếm các phần tử xuất hiện 1 lần trong dãy.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
I,n,dem,j: longint;
Begin
Read (n);
For i:1 to n do read (a[i]);
For i:1 to n-1 do
begin
Dem:=1;
For j:= i+1 to n do
If a[i] = a[j] then dem:=dem+1;
If dem = 1 then write (a[i],’ ‘);
End;
Readln;
Readln;
End.
58 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử. In
ra các phần tử xuất hiện một lần trong mảng.
a. Ý tưởng:
59 Lấy ví dụ:
1 2 3 4 5 6 => 1 2 3 4 5 6
1 1 2 2 3 3 => khong co phan tu xuat hien 1 lan
1 2 3 1 2 2 => 3
1 1 1 1 1 1 => khong co phan tu xuat hien 1 lan
60 Nhập dãy số nguyên a gồm n phần tử.
61 Đếm các phần tử xuất hiện 1 lần trong dãy bằng cách Sử dụng biến
đếm, gán đếm ban đầu là 0. So sánh lần lượt các phần tử của mảng với
nhau. Nếu phần tử nào bằng nhau thì biến đếm sẽ tăng lên 1 đơn vị.
cuối cùng xét biến đếm. nếu biến đếm =0 thì phần tử đó xuất hiện 1
lần. in ra kết quả.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
I,n,dem,j: longint;
Begin
Read (n);
For i:=1 to n do read (a[i]);
For i:=1 to n-1 do
begin
Dem:=0;
For j:= i to n do
If a[i] = a[j] then dem:=dem+1;
If dem = 1 then write (a[i],’ ‘);
End;
Readln;
Readln;
End.
62 Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử , in
ra phần tử n là số lẻ khác nhau của mảng.
a. Ý tưởng:
63 Lấy ví dụ:
1 2 3 4 5 6 => 1 3 5
1 1 2 2 3 3 => 1 3
1 1 1 1 1 1 => 1
2 4 6 8 2 4 => không có phần tử lẻ
2 2 2 2 2 2 => không có số lẻ
0 0 0 0 0 0 => không có số lẻ
64 Nhập dãy số nguyên a gồm n phần tử.
65 Kiểm tra các phần tử lẻ trong mảng
66 So sánh, đếm và in các phần tử lẻ khác nhau của mảng.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
i,n,dem,j: longint;
Begin
Read (n);
For i:=1 to n do read (a[i]);
For i:=1 to n do
If a[i] mod 2 <> 0 then
Begin
Dem:=1;
For j:=i+1 to n do
If a[i] = a[j] then dem:=dem+1;
If (dem=1) and (a[i] <> a[j]) then write (a[i],’ ‘);
End;
If a[i] mod 2 = 0 then write (‘khong co phan tu le’);
Readln.
End.
67 Dãy con tăng dần (giảm dần) có nhiều phần tử nhất.
a. Ý tưởng:
- Lấy ví dụ: 1 2 3 2 4 5 6 -> 2 4 5 6
- Xác định vị trí đầu, cuối của dãy con tăng dần có nhiều phần tử nhất.
- Đếm số dãy con tăng dần dài nhất
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
N,I,j,d,m:longint;
Begin
Read (n);
For i:=1 to n do read (a[i]);
M:=0;
I:=0;
Repeat d:=1;
I:=i+1;
While (a[i] <= a[i+1]) do
Begin
D:=d+1;
I:=i+1;
End;
If d>m then m:=d;
Until i=n;
Write (m);
I:=0;
Repeat d:=1;
I:=i+1;
While (a[i] <= a[i+1]) do
Begin
D:=d+1;
I:=i+1;
End;
if d=m then
for j:=i+1-m to i do
write (a[i],’ ‘);
until i=n;
readln
End.
68 Dãy con tăng dần (giảm dần) có nhiều phần tử nhất và tính tổng
của dãy con đó.
a. Ý tưởng:
- Lấy ví dụ: 1 2 3 2 4 5 6 -> 2 4 5 6 s=17
- Xác định vị trí đầu, cuối của dãy con tăng dần có nhiều phần tử nhất.
- Đếm số dãy con tăng dần dài nhất
- Tính và in tổng
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
N,I,j,d,m,s:longint;
Begin
Read (n);
For i:=1 to n do read (a[i]);
M:=0;
I:=0;
Repeat d:=1;
I:=i+1;
S:=a[i];
While (a[i] <= a[i+1]) do
Begin
D:=d+1;
I:=i+1;
S:=s+a[i];
End;
If d>m then m:=d;
Until i=n;
Write (m);
I:=0;
Repeat d:=1;
I:=i+1;
While (a[i] <= a[i+1]) do
Begin
D:=d+1;
I:=i+1;
End;
if d=m then
for j:=i+1-m to i do
write (a[i],’ ‘);
until i=n;
readln
End.
69 Dãy con tăng dần dài nhất có tổng nhỏ nhất
a. Ý tưởng:
- Lấy ví dụ: 1 2 3 2 4 5 6 1 2 3 4-> 1 2 3 4 s=10
- Xác định vị trí đầu, cuối của dãy con tăng dần có nhiều phần tử nhất.
- Đếm số dãy con tăng dần dài nhất
- Tính và so sánh tổng. tổng của dãy con nào bé hơn thì in dãy con đó.
b. Chương trình tham khảo:
Var a:array [1..50] of longint;
N,I,j,d,m,s,ms:longint;
Begin
Read (n);
For i:=1 to n do read (a[i]);
M:=0;
I:=0;
Repeat d:=1;
I:=i+1;
S:=a[i];
While (a[i] <= a[i+1]) do
Begin
D:=d+1;
I:=i+1;
S:=s+a[i];
End;
If d>m then m:=d;
Until i=n;
Write (m);
I:=0;
Repeat d:=1;
I:=i+1;
While (a[i] <= a[i+1]) do
Begin
D:=d+1;
I:=i+1;
End;
if d=m then
for j:=i+1-m to i do
write (a[i],’ ‘);
until i=n;
readln
End.
a. Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử.
Chèn số k, sao cho mảng vẫn theo thứ tự tăng dần.
a. Ý tưởng:
- Lấy ví dụ:
70 3 5 7 8 9 => 2 3 4 5 7 8 9
- Kiểm tra các phần tử của dãy với số k, nếu số k nhỏ hơn số đầu tiên thì
chèn số k vào vị trí đầu, nếu số k lớn hơn số cuối cùng thì chèn số k vào
sau vị trí cuối, số k nằm trong khoảng giữa thì kiểm tra só k với các số
trong dãy xem số k nằm ở vị trí nào của dãy để dãy vẫn tăng. In kết quả.
b. Chương trình tham khảo:
Var a:array[1..50] of longint;
I,j,k,n: longint;
Begin
Read (n);read (k);
For i:=1 to n do read (a[i]);
If k<a[1] then
For i:=n+1 downto 2 do
A[i]:=a[i-1];
A[1]:=k;
If k> a[n] then a[n+1]:=k;
If (k>a[1]) and (k<a[n]) then
Begin
Dem:=0;
J:=1;
While (k>a[j]) do j:=j+1;
For i:=n+1 downto j+1 do
A[i]:=a[i-1];
A[j]:=k;
End;
For i:=1 to n+1 do
Write (a[i],’ ‘)
Readln;
Readln;
End.
Top Related