You are on page 1of 21

Câu 1: Nhập dãy A(N) gồm N số nguyên a1, a2, … an.

Cho biết đó có là dãy số


giảm hay không? Tìm giá trị nhỏ nhất m và giá trị lớn nhất M của dãy. Hiện các
số nguyên theo thứ tự tăng dần thuộc đoạn [m,M] mà các số nguyên này không
thuộc dãy.
program Cau_1;
uses crt;
const Nmax=N;
type ArrInt = array[1..Nmax] of integer;
var A: ArrInt;
B,N,i,M,S: integer;
K,T: Boolean;
begin
clrscr;
write('Nhap N '); readln(N);
for i:=1 to N do
begin
write('A',i,'= '); readln(A[i]);
end;
T:=True;
for i:=1 to N-1 do
if A[i]<A[i+1] then T:= False;
K:=T; write('Day giam: ',K); readln;
M:=A[1];
for i:=1 to N do
begin
if M<A[i] then M:=A[i];
end;
write('Gia tri lon nhat M= ',M); readln;
B:=A[1];
for i:=1 to N do
begin
if B>A[i] then B:=A[i];
end;
write('Gia tri nho nhat m= ',B); readln;
write('Day so nam giua [m,M] la: ');
begin
S:=B; write(S:4);
repeat
S:=S+1; write(S:4) until S=M;
end;
readln;
end.
Câu 2: Có N người sắp thành hàng theo thứ tự để mua hàng . Thời gian người bán
hàng phục vụ người thứ i là Ti ( i = 1,2,.., N ) .Nhập các số T 1 , T2 ...,Tn . Tìm thời
gian mà người thứ i phải chờ để đến lượt mình mua hàng .
program Cau_2;
uses crt;
const Nmax=N;
type ArrInt=array[1..Nmax] of integer;
var T:ArrInt;
S,i,N,k: Integer;
begin
clrscr;
S:=0;
write('Nhap so khach hang: '); readln(N);
for i:=1 to N do
begin
writeln('T',i,'= '); readln(T[i]);
end;
write('Nhap i: '); readln(i);
for k:=1 to i-1 do
S:=S+T[k];
writeln('Thoi gian nguoi thu ',i,' phai cho de den luot minh mua hang: ',S);
readln
end.
Câu 3: Nhập ngẫu nhiên Mảng A(N) gồm N số nguyên ( N nhập từ bàn phím ) .
Lần lượt xoá các phần tử A[i] chia hết cho 3 ( i tăng dần ) sau đó dồn các số đứng
ngay sau A[i] về phía đầu dãy 1 vị trí và giữ nguyên thứ tự của chúng . Hiện mảng
sau khi đã dồn .

program Cau_3;

uses crt;

const Nmax=N;

type ArrInt=array[1..Nmax] of integer;

var A: ArrInt;

N,i,k: Integer;
begin

clrscr;

write('Nhap N: '); readln(N);

for i:=1 to N do

begin

write('A[',i,']= '); readln(A[i]);

end;

writeln('Day sau khi da don:');

for k:=1 to N do

if A[k] mod 3<>0 then writeln(A[k]);

readln

end.

Câu 4: Nhập ngẫu nhiên Mảng A(N) gồm N số nguyên ( N nhập từ bàn phím ) .
Lần lượt xoá các phần tử A[i] chia hết cho 3 ( i tăng dần ) sau đó chèn vào 3 số 0
ở vị trí i,i+1,i+2 . Hiện mảng sau khi đã dồn .

program Cau_4;

uses crt;

const Nmax=N;

type ArrInt=array[1..Nmax] of integer;

var A: ArrInt;

i,N: Integer;

begin

clrscr;
write('Nhap N: '); readln(N);

for i:=1 to N do

begin

write('A[',i,']= '); readln(A[i]);

end;

writeln('Day A sau khi don: ');

for i:=1 to N do

if A[i] mod 3=0 then begin

A[i]:=0; write(' ',A[i],' 0 0'); end

else write(A[i]:4);

readln

end.

Câu 5: Viết chương trình nhập vào một dãy số nguyên có n phần tử.

a. Đưa những phần tử lẻ ra đầu danh sách, những phần tử chẵn về cuối danh sách
và in kết quả ra màn hình.

b. Sắp xếp các phần tử lẻ đầu danh sách theo thứ tứ tăng dần, sắp xếp các phần tử

chẵn cuối danh sách theo thứ tự giảm dần. In danh sách ra màn hình.

a) program Cau_5;

uses crt;

const Nmax=N;

type ArrInt=array[1..Nmax] of integer;

var A: ArrInt;

N,i,k,t: Integer;
begin

clrscr;

t:=0;

write('Nhap N: ');readln(N);

for i:=1 to N do

begin

write('A[',i,']= '); readln(A[i]);

end;

for k:=N downto 2 do

for i:=1 to k-1 do

if A[i] mod 2=0 then begin

t:=A[i]; A[i]:=A[i+1]; A[i+1]:=t;

end;

writeln('Day so duoc sap xep la: ');

For i:=1 to N do write(A[i]:4);

readln

end.

b) program Cau_5;
uses crt;
const Nmax=N;
type ArrInt=array[1..Nmax] of integer;
var A: ArrInt;
N,i,k,t,S: Integer;
begin
clrscr;
t:=0;S:=0;
write('Nhap N: ');readln(N);
for i:=1 to N do
begin
write('A[',i,']= '); readln(A[i]);
end;
for k:=N downto 2 do
for i:=1 to k-1 do
if A[i]>A[i+1] then begin
S:=A[i]; A[i]:=A[i+1]; A[i+1]:=S;
end;
for k:=N downto 2 do
for i:=1 to k-1 do
if A[i] mod 2=0 then begin
t:=A[i]; A[i]:=A[i+1]; A[i+1]:=t;
end;
writeln('Day so duoc sap xep la: ');
For i:=1 to N do write(A[i]:4);
Readln; end.

Câu 6: Trộn 2 mảng đã xếp tăng thành mảng thứ 3 cũng xếp tăng

program Cau_6;

uses crt;
const Nmax=N;
type ArrInt=array[1..Nmax] of integer;
var A,B,C: ArrInt;
D,M,N,T,S,i,k:Integer;
begin
clrscr;
write('Nhap M,N: '); readln(M,N);
for i:=1 to M do
begin
write('A[',i,']= '); readln(A[i]);
end;
for i:=1 to N do
begin
write('B[',i,']= '); readln(B[i]);
end;
for k:=M downto 2 do
for i:=1 to k-1 do
if A[i]>A[i+1] then begin
S:=A[i]; A[i]:=A[i+1]; A[i+1]:=S;
end;
writeln('Day A:');
for i:=1 to M do writeln(A[i]:4);
for k:=N downto 2 do
for i:=1 to k-1 do
if B[i]>B[i+1] then begin
T:=B[i]; B[i]:=B[i+1]; B[i+1]:=T;
end;
writeln('Day B: ');
for i:=1 to N do writeln(B[i]:4);
for i:=1 to M do C[i]:=A[i];
for i:=M+1 to M+N do C[i]:=B[i-M];
for k:=M+N downto 2 do
for i:=1 to k-1 do
if C[i]>C[i+1] then begin
D:=C[i]; C[i]:=C[i+1]; C[i+1]:=D;
end;
writeln('Day C hop tu day A va B la: ');
for i:=1 to M+N do write(C[i]:4);
readln
end.
Câu 7: Câu a )Trộn 2 mảng A(N) và B(M) vào mảng C sao cho C có các phần tử
đôi một khác nhau và không đồng thời thuộc 2 mảng A và B .
program Cau_7;
uses crt;
const Nmax=500;
type ArrInt=array[1..Nmax] of integer;
var A,B,C: ArrInt;
i,j,D,k,N,M,T: Integer;
begin
clrscr;
write('Nhap N,M: '); readln(N,M);
for i:=1 to N do
begin
write('A[',i,']= '); readln(A[i]);
end;
for i:=1 to M do
begin
write('B[',i,']= '); readln(B[i]);
end;
write('Mang A:');
for i:=1 to N do write(A[i]:4);readln;
write('Mang B: ');
for i:=1 to M do write(B[i]:4);readln;
for i:=1 to N do C[i]:=A[i];
for i:=N+1 to M+N do C[i]:=B[i-N];
write('Mang C: ');
for i:=1 to M+N do write(C[i]:4); readln;
T:=M+N;
i:=2;
while i <=T do
begin
j:=1;
while C[j] <> C[i] do
j:=j+1;
if j < i then
begin
for k:=i to (T-1) do
C[k]:= C[k+1];
T:=T-1;
end
else
i:=i+1;
end;
writeln('Mang sau khi don lai: ');
for i:=1 to T do
write(C[i]:4);
readln
end.

Câu 8: Cho một dãy số nguyên A(i)(i=1,N). Viết chương trình:

a) Tính và in ra trung bình cộng của các số dương.


b) Đếm xem có bao nhiêu số chia hết cho 3.
c) In ra vị trí các số bằng 0 (nếu có) trong dãy đã cho.

a) program Cau_8a;
uses crt;
const Nmax=100;
type ArrInt=array[1..Nmax] of integer;
var A: ArrInt;
N,i,S,dem: Integer;
begin
clrscr; S:=0; dem:=0;
write('Nhap N: '); readln(N);
for i:=1 to N do
begin
write('A[',i,']= '); readln(A[i]);
end;
for i:=1 to N do
if A[i]>0 then begin S:=S+A[i]; dem:=dem+1;
end;
writeln('Trung binh cong cac so duong la: ',(S/dem):3:3);
readln; end.
b) program Cau_8b;
uses crt;
const Nmax=100;
type ArrInt=array[1..Nmax] of integer;
var A: ArrInt;
N,i,dem: Integer;
begin
clrscr; dem:=0;
write('Nhap N: '); readln(N);
for i:=1 to N do
begin
write('A[',i,']= '); readln(A[i]);
end;
for i:=1 to N do
if A[i] mod 3=0 then begin dem:=dem+1;end;
write('Co ',dem,' so chia het cho 3');
readln
end.
c) program Cau_8c;
uses crt;
const Nmax=100;
type ArrInt=array[1..Nmax] of integer;
var A: ArrInt;
N,i: Integer;
begin
clrscr;
write('Nhap N: '); readln(N);
for i:=1 to N do
begin
write('A[',i,']= '); readln(A[i]);
end;
writeln('Vi tri cac so bang 0:');
for i:=1 to N do
if A[i]=0 then write(i:4);
readln
end.
Câu 9: Viết chương trình tìm các số có 3 chữ số mà tổng lập phương các chữ số
của nó bằng chính nó (các số Amstrong).

program Cau_9;
uses crt;
const Nmax=N;
type ArrInt=array[1..Nmax] of integer;
var A: ArrInt;
i,t,b,c,dem:integer;
begin
clrscr;
for t:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
if (t*t*t+b*b*b+c*c*c=(100*t+10*b+c)) then begin
dem:=dem+1; A[dem]:=(100*t+10*b+c); end;
writeln('Cac so co 3 chu so ma tong lap phuong cac chu so cua no bang chinh no:
');
for i:=1 to dem do
write(A[i]:4);
readln
end.
Câu 10: Viết chương trình in ra các số khác nhau trong dãy N số nguyên a1 . . an
program Cau_10;
uses crt;
const Nmax=N;
type ArrInt=array[1..Nmax] of integer;
var A: ArrInt;
N,i,k,j:Integer;
begin
clrscr;
write('Nhap N: '); readln(N);
for i:=1 to N do
begin
write('A[',i,']= '); readln(A[i]);
end;
i:=2;
while i <= N Do
begin
j:=1;
while A[j] <> A[i] do
j:=j+1;
if j < i then
begin
for k:=i to N-1 do
A[k]:= A[k+1];
N:=N-1;
end
else
i:=i+1;
end;
writeln('Mang sau khi don lai: ');
for i:=1 to N do
write(A[i]:4);
readln
end.
Câu 11: Viết chương trình xóa các số chính phương trong dãy N số nguyên a1..an
program Cau_11;

uses crt;
const Nmax=N;

type ArrInt=array[1..Nmax] of integer;

var A: ArrInt;

N,i,k:integer;

t: real;

begin

clrscr;t:=0;k:=0;

write('Nhap N: '); readln(N);

for i:=1 to N do

begin

write('A[',i,']= '); readln(A[i]);

end;

writeln('Day sau khi xoa so chinh phuong: ');

for i:=1 to N do

begin

t:=sqrt(A[i]); k:=trunc(t);

if k*k<>A[i] then write(A[i]:4); end;

readln

end.

Câu 12: Nhập một số tự nhiên N < 20 và N số tự nhiên a1,a2,..,aN .yêu cầu:
Dòng 1 Ghi ra dãy số được sắp xếp theo thứ tự không giảm

Dòng 2 Ghi ra dãy b1, b2,…,bN trong đó bi là số nguyên tố gần a i nhất (i=1..N)
trong trường hợp có hai số gần ai như nhau ta chọn số nhỏ.
uses crt;

var n,i,j,tg:longint;

a:array[1..20] of longint;

kt:array[0..1000000] of boolean;

function snt(x:longint):boolean;

var i1:longint;

begin

if x<2 then exit(false);

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

begin

if x mod i1=0 then exit(false);

end;

kt[x]:=true;

exit(true);

end;

function kq(y:longint):longint;

var j1:longint;

begin

if (kt[y]=true) or (snt(y)=true) then exit(y);

j1:=0;

repeat
j1:=j1+1;

until (kt[y-j1]=true) or (kt[y+j1]=true) or (snt(y-j1)=true) or (snt(y+j1)=true);

if kt[y-j1]=true then exit(y-j1)

else exit(y+j1);

end;

begin

clrscr;

write('Nhap so phan tu cua day ');readln(n);

for i:=1 to n do

begin

write('a[',i,']=');

readln(a[i]);

end;

for i:=1 to n-1 do

for j:=i+1 to n do

begin

if a[i]>a[j] then

begin

tg:=a[i];

a[i]:=a[j];

a[j]:=tg;
end;

end;

writeln('a)Day sau khi sap xep la ');

for i:=1 to n do write(a[i],' ');

writeln;

writeln('b)Day B la ');

for i:=1 to n do

begin

write(kq(a[i]),' ');

end;

readln;

end.

Câu 13: Nhập một mảng số gồm N số tự nhiên. Yêu cầu ghi ra màn hình ; dòng
1: mảng ban đầu. Dòng 2: mảng sau khi đã xoá hết các số nguyên tố trong mảng

program Cau_13;

uses crt;

const Nmax=N;

type ArrInt=array[1..Nmax] of integer;

var A: ArrInt;

i,N,k,s: integer;

t:real;

begin

clrscr;
write('Nhap N: '); readln(N);

for i:=1 to N do

begin

write('A[',i,']= '); readln(A[i]);

end;

write('Mang ban dau: ');

for i:=1 to N do write(A[i]:4);

readln;

write('Mang sau khi xoa het cac so nguyen to: ');

for i:=1 to N do

begin

t:=sqrt(A[i]); s:=trunc(t);

for k:=2 to s do

if A[i] mod k=0 then write(A[i]:4); end;

readln

end.

Câu 14: Nhập vào từ bàn phím số nguyên dương N (1<N<30) và N số nguyên
dương có giá trị nhỏ hơn 1000.

Xuất ra màn hình các kết quả sau:

+ Dòng 1 ghi N số đã cho sau khi xếp theo thứ tự giảm .

+ Dòng 2 ghi số T là tổng của N số đã cho.

+ Dòng 3 ghi số thực R với hai chữ số đằng sau dấu phẩy là chi phí nhỏ nhất khi
thực hiện các phép cộng để tính tổng T, biết rằng mỗi khi tính tổng hai số nguyên
dương X và Y phải trả chi phí lượng tiền bằng 1% của tổng X+Y. Ví dụ khi tính
tổng của bốn số 35, 19, 21, 25 cần chi phí tối thiểu là R=2,00. (đề thi 2006)

program Cau_14;

uses crt;

const Nmax=100;

type ArrInt=array[1..Nmax] of integer;

var A: ArrInt;

N,i,k,S,T,j:integer;

p:real;

begin

clrscr;

write('Nhap N: '); readln(N);

for i:=1 to N do

begin

write('A[',i,']= '); readln(A[i]);

end;

for k:=N downto 2 do

for i:=1 to k-1 do

if A[i]<A[i+1] then begin

S:=A[i]; A[i]:=A[i+1]; A[i+1]:=S;

end;

write('Day A sau khi xep lai: ');

for i:=1 to N do write(A[i]:4);readln;


T:=0;

for i:=1 to N do

T:=T+A[i];

write('Tong N so la: ',T); readln;

p:=0;

repeat

for i:=1 to n do

begin

if i+1<=N then

begin

A[i]:=A[i]+A[i+1];

p:=p+(A[i]/100);

for j:=i+1 to N do A[j]:=A[j+1];

N:=N-1;

end;

end;

until N=1;

write('Chi phi toi thieu tinh tong T la: R=',p:4:2);

readln

end.

You might also like