Kĩ thuật đặt lính canh các bt cơ bản 134/ Viết hàm tìm giá trị lớn nhất trong mảng 1 chiều các số thực float lonnhatfloat a[],int n 137/ Tìm 1 vị trí mà giá trị tại đó là giá trị nhỏ n
Trang 1129/ Viết hàm nhập mảng 1 chiều các số nguyên
voi d NhapMang(i nt a[], int &n)
130/ Viết hàm xuất mảng 1 chiều các số thực
voi d XuatMang(float a[], int n)
131/ Viết hàm xuất mảng 1 chiều các số nguyên
voi d XuatMang(i nt a[], int n)
132/ Viết hàm liệt kê các giá trị chẵn trong mảng 1 chiều các số nguyên
voi d LietKe GiaTri Chan(int a[], int n)
133/ Viết hàm liệt kê các vị trí mà giá trị tại đó là giá trị âm trong mảng 1 chiều
voi d LietKeVi TriAm(int a[], int n)
Trang 2Kĩ thuật đặt lính canh các bt cơ bản
134/ Viết hàm tìm giá trị lớn nhất trong mảng 1 chiều các số thực
float lonnhat(float a[],int n)
137/ Tìm 1 vị trí mà giá trị tại đó là giá trị nhỏ nhất trong mảng 1 chiề u các số thực
float vitrinhonhat(float a[],int n)
138/ Tìm Vị trí của giá trị chẵn đầu tiên trong mảng một chiề u các số nguyên Nếu mảng ko có giá trị chẵn thì trả về giá trị -1
int vitrichandau(i nt a[] , int n)
Trang 4142/ Tìm Giá trị nhỏ nhất trong mảng 1 chiề u các số thực
float NhoNhat(float a[], int n)
{
fl oat min = a[0];
for (i nt i =1; i<n; i++)
Trang 5145/ Tìm Số hoàn thiệ n đầu tiên trong 1 chiề u các số nguyên Nếu mảng ko có số hoàn thiện thì trả
Trang 6int hoanthiencuoi(int a[],int n)
Trang 8154/ hãy tìm vị trí giá trị âm lớn nhất trong mảng số thực ko có thì trả về -1
int VTriAmMax(fl oat a[], int n)
Bài tập luyện tư duy
155/ hãy tìm giá trị trong mảng các số thực xa giá trị x nhất
voi d kcxanhat(fl oat *A , i nt n , fl oat x )
Trang 9157/ hãy tìm đoạn [a,b] sao cho đoạn này chứa tất cả các giá trị trong mảng
voi d ti mdoan(st* A, int n)
158 hãy tìm giá trị x sao cho đoạn [-x,x] chứa tất cả các giá trị trong mảng
float ti mx(float* A, int n)
161/ hãy tìm giá trị đầu tiên nằm trong khỏang (x,y) cho trc Nếu ko có trả về giá trị x
[FONT="]int dautie ntr ong doan(int a[], i nt n, i nt x, int y)[/ FONT]
[FONT="]{[/ FONT]
[FONT="] int de m =0;[/ FONT]
[FONT="] for(int i=0; i<n;i++)[/ FONT]
[FONT="] {[/ FONT]
[FONT="] if ((a[i]>=x)&&(a[i ]<=y))[/ FONT]
[FONT="] {[/ FONT]
[FONT="] de m++;[/ FONT]
Trang 10[FONT="] bre ak;[/ FONT]
Trang 12167/ Tìm giá trị toàn là chữ số lẻ và lớn nhất trong những số thỏa điều kiện ko có trả về 0 int toanchusole(int n)
Trang 13int max = a[0 ];
for(int i=1; i<n; i ++)
int max = l onnhat(A, n);
for (i nt i = max + 1; i>max; i++)
{
Trang 14int min = a[0];
for (i nt i =1; i<n; i++)
min = (min < a[i])? min: a[i];
172/ Hãy tìm bội số chung nhỏ nhất trong mảng nguyên
int solonnhat(int A[], int n)
int boiso = max ;
for (i nt i =0; i<n; i++)
Trang 15}
173 * Hãy viết hàm tìm chữ số xuất hiện ít nhất trong mảng
int ChuSo(int a[], int n)
174 * Hãy viết hàm liệ t kê các cẵp giá trị (a,b) trong mảng thỏa đk a<=b
voi d LietKe(int a[], int n)
175 * Hãy viết hàm tìm 2 giá trị gần nhau nhất trong mảng
voi d LietKe(int a[], int n)
Trang 16Các bài tập tìm kiếm và liệ t kê
176/Liệt kê các số âm trong mảng số thực
voi d xuatk q(fl oat a[],int m)
177/ Liệt kê các số trong mảng thực thuộc [x,y] cho trước
voi d LietKetTr ongDoanXY(fl oat a[], int n, float x, fl oat y)
178 Liệt kê các số chẵn trong mảng nguyên thuộc [x,y]
voi d LietKetChanTr ong DoanXY(int a[], int n, int x, int y)
179/ Liệt kê các số thỏa đk lớn hơn trị tuyệt đối của số đứng liền sau nó
voi d LietKe(int a[], int n)
181 Liệt kê số chẵn có ít nhất 1 lận cận cũng là giá trị chẵn
182 Liệt kê các số có ít nhất 1 lận cận trái dấu với nó
183 Liệt kê vị trí mà giá trị tại đó là giá trị lớn nhất
184 Liệt kê vị trí của số nguyên tố
185 Liệt kê vị trí của số chính phương
186 Liệt kê vị trí mà giá trị bằng giá trị âm đầu tiên
Trang 17187 Liệt kê vị trí mà giá trị bằng giá trị dương nhỏ nhất
188 Liệt kê vị trí chẵn lớn nhất
189 Liệt kê giá trị mà giá trị đó có chữ số đầu tiên là chữ số lẻ
190 Liệt kê giá trị tòan chữ số lẻ
191 Liệt kê các giá trị cực đại Cực đại khi lớn hơn các ptử lận cận
192 Liệt kê giá trị có chữ số đầu tiên là chẵn
193 Liệt kê giá trị có dạng 3^k Nếu mảng ko có thì trả về 0
194 Liệt kê các cặp giá trị gần nhau nhất
195 Liệt kê các bộ 3 giá trị (a,b,c) thỏa a=b+c ví dụ: (6,2,4)
196 Liệt kê các số âm
197 Liệt kê các chữ số đầu là lẻ
198 Liệt kê các vị trí mà tại đó là giá trị max
199 Liệt kê vị trí mà giá trị đó là số nguyên tố
Trang 18204/ Tổng các ptử lớn hơn ptử đứng liền trước nó
int tonggiatri(int A[], i nt n)
206/ Tổng các ptử lớn hơn ptử xung quanh
int tonggiatri(int A[], i nt n)
Trang 20s=s+A[i ];
Trang 21214/ Trung bình nhân các số dương
float TB NhanDuong(i nt A[], int n, int m)
Trang 22217/ Đếm số dương chia hế t cho 7 trong mảng
int de msochan(int a[], int n)
Trang 23219/ Đếm số lần xuất hiện của giá trị x trong mảng
int de m (int a[], int n,int x)
220 Đếm số lượng giá trị tận cùng bằng 5 trong mảng
int de m (int a[], int n)
Trang 24222/ Đếm ptử lớn hơn hay nhỏ hơn ptửs xung quanh trong mảng
int De m(int A[], int n)
224/ Đếm số hoàn thiện trong mảng
int sohoanthie n(int n)
{
int tong=0 ;
Trang 25225/ Đếm số lượng giá trị lớn nhất có trong mảng
int De m(int a[], int n)
{
int i=0,De mTam=0;
int Max = a[0];
227/ Hãy xác định số lượng ptử kề nhau mà cả 2 trái dấu
int De m(int a[], int n)
{
int i=0,De mTam=0;
for (i =0; i <n-1 ; i++)
{
Trang 26229/ Đếm số lượng các giá trị phân biệt có trong mảng
int De m(int a[], int n)
{
int i,j,De mTam=0,test;
for (i=0; i<n; i++)
230/ Liệt kê tần suất xuất hiện các giá trị xuất hiện trong mảng (mỗi giá trị liệt kê 1 lần)
voi d lietke(int *a, int n)
Trang 27231/ Hãy liệt kê các giá trị xuất hiện đúng 1 lần trong mảng
voi d lietke(int a[], int n)
printf("Gi a tri c hi xuat hien dung 1 l an\n\t");
for (i nt k=0 ; k<vi tri; k++)
232/ hãy liệt jê các giá trị xuất hiện quá 1 lần (mỗi giá trị liệt kê 1 lần)
voi d lietke(int a[], int n)
Trang 28printf("Gi a tri c hi xuat hien dung 1 l an\n\t");
for (i nt k=0 ; k<vi tri; k++)
233/ Hãy liệt kê tần suất các giá trị xuất hiện trong mảng
voi d lietke(int *a, int n)
234/ Cho 2 mảng a,b Đếm ptử chỉ xuất hiện 1 trong 2 mảng
int De m(int a[],i nt b[], int na,int nb)
Trang 29235/ Cho 2 mảng a,b Liệt kê ptử xuất hiện 1 trong 2 mảng
voi d LietKe(int a[],int b[], int na,int nb)
236 * Cho 2 mảng a,b Hãy cho biết số lần xuất hiện của mảng a trong mảng b
int De m(int a[],i nt b[], int na,int nb)
Trang 30int MotGi aTriXuatHienNhieuNhat(int a[],int n)
int flag [100]={0},i,j,De m1;
//Tien hanh gan mảng fl ag == nhung c on so de m dc
//Liet ke c ac so xuat hien nhieu nhat
printf("So xuat hien nhie u nhat trong mang : ")
Trang 31240/ Ktra mảng có giá trị 0 hay ko?Có trả về 1, ko có trả về 0
int kiemtr a0(int A[] , int n)
{
int flag = 0; //xe m như mảng ko c ó giá trị 0
for(int i=0 ; i<n ;i++)
Trang 33}
retur n flag;
}
245/ Ktra mảng có toàn số chẵn ko? Có trả về 1, ko có trả về 0
int kttoanchan(int A[] , int n)
246/ Ktra mảng có đối xứng ko? Có trả về 1, ko có trả về 0
int ktdoixung(int A[] , int n)
248/ Ktra mảng có tăng dần hay ko?
int kttang dan(int A[] , int n)
249/ Ktra mảng có giảm dần hay ko?
int ktgiam(int A[] , i nt n)
{
Trang 34251/ Hãy cho biết các ptử trong mảng có bằng nhau ko?
int ktbangnhau(int A[] , i nt n)
253/ Hãy cho biết tất cả ptử trong mảng a có nằm trong mảng b ko?
int ktAnamtrongB(int A[] , int B[] , int n , int m)
{
int flag = 0;
int de m = 0;
for(int i = 0 ; i < n ; i ++)
Trang 36257/ Sắp xếp lẻ tăng dần nhưng giá trị khácgiữ nguyên vị trí
voi d sapxe p(int a[],int n)
Trang 37261 Sắp xếp số dương tăng dần, các số âm giữ nguyên vị trí
voi d sapxe p(int a[],int n)
{
for (i nt i =0;i<n;i++)
{
Trang 38if (a[i]>0 )
{
for (int j=i +1;j<n;j++) {
if (a[j]>0 && a[i]>a[j]) {
int te mp=a[i]; a[i] = a[j]; a[j]=te mp; }
}
}
}
} 262/ Sắp xếp chẵn, lẻ tăng dần nhưng vị trí tương đối giữa các số ko thay đổi voi d sapxe p(int a[],int n) { for (i nt i =0;i<n;i++) {
for (int j=i +1;j<n;j++) {
if (((a[i]% 2==0 && a[j]% 2==0)||(a[i]% 2!=0 && a[j]% 2!=0)) && a[i]>a[j]) {
int te mp=a[i]; a[i] = a[j]; a[j]=te mp; }
}
}
} 263/ Sắp xếp số dương tăng dần, âm giảm dần Vị trí tương đối ko đổi voi d sapxe p(int a[],int n) { for (i nt i =0;i<n;i++) {
for (int j=i +1;j<n;j++) {
if (a[i]>0 && a[j]>0 && a[i ]>a[j]) {
int te mp=a[i]; a[i] = a[j]; a[j]=te mp; }
else if (a[i]<0 && a[j]<0 && a[i ]<a[j]) {
int te mp=a[i]; a[i] = a[j]; a[j]=te mp; }
}
}
} 264 Trộn 2 mảng đã tăng thành 1 mảng đc sắp xếp tăng voi d sapxe p(int a[],int n) { for (i nt i =0;i<n;i++) {
for (int j=i +1;j<n;j++) {
if (a[i]>a[j]) {
int te mp=a[i];
a[i] = a[j];
a[j]=te mp;
Trang 39sapxe p(a,na); //Sap xe p tang mang A
sapxe p(b,nb); //Sap xe p tang mang B
sapxe p(a,na); //Sap xe p tang mang A
sapxe p(b,nb); //Sap xe p tang mang B
Trang 40266/ Thêm 1 ptử x vào mảng tại vị trí k
voi d the mgiatri(int a[], i nt &n, i nt x, int k)
printf("Nhap mang 1 chieu\n");
printf("Nhap n : "); scanf("% d",&n);
268/ Hãy tạo mảng b từ mảng a các giá trị 0,1 để mảng có tính chẵn lẻ
269/ Thêm x vào trong mảng tăng nhưng vẫn giữ nguyên tính tăng của mảng
voi d ChenXMang Tang(int a[], int &n, int x)
Trang 41printf("Nhap mang 1 chieu\n");
printf("Nhap n : "); scanf("% d",&n);
Trang 42fl oat max = a[0];
for (i nt i =1; i<n ; i++)
{
max=(max<a[i ])?a[i]:max; }
retur n max;
}
voi d xoamang(fl oat a[], int &n)
{
fl oat max = lonnhat(a,n);
for (i nt i =0; i<n; i++)
{
if (a[i]==max)
{
xoavi tri(a,n,i ); i ;
}
}
}
Trang 43275/ Xóa tất cả số chính phương trong mảng voi d xoavitri(int a[], i nt &n, int k)
Trang 44279/ Xóa tất cả ptử xuất hiên nhiều hơn 1 lần trong mảng
voi d xoavitri(int a[], i nt &n, int k)
Trang 45}
}
}
Kĩ thuật xử lý mảng
280/ Hãy đưa số 1 về đầu mảng
voi d DoiCho(int a[], int n, int k)
int tam = a[k];
for(int i = k ; i>0; i )
Trang 46dua0(a,i,vitrichanc uoi); // vi tri i }
int tam = a[k];
for(int i = k ; i>0; i )
283/ Đảo ngược mảng ban đầu
voi d hoanvi(i nt &a, int &b)
hoanvi (a[i],a[j]); }
Trang 47286/ Dịch trái xoay vòng các ptử trong mảng
voi d dichtr ai(int a[], int n)
{
int tam = a[0];
for (i nt i =0; i<n-1; i++)
287/ Dịch phải xoay vòng các ptử trong mảng
voi d dichphai (int a[], int n)
{
int tam = a[n-1];
for (i nt i =n-1; i>0; i )
mau = Ge tStdHandle(STD_OUTPUT_ HANDLE);
SetConsole TextAttri bute(mau,a);
Trang 48290/ Đảo ngược thứ tự số chẵn và lẻ trong mảng nhưng giữ vị trí tương đối
voi d hoanvi(i nt &a, int &b)
291/ Biến đổi mảng bằng cách thay giá trị max = giá trị min và ngc lại
voi d mi nmax(int a[], int n, int &max, int &min)
Trang 49int phannguyen = (int) (n) ;
fl oat phanle = n - phannguye n;
if (phanle <=0.5)
{
n = (fl oat)phannguye n; }
else {
n = (fl oat)phannguye n + 1; }
} voi d biendoi(float a[], int n) { for (i nt i =0; i<n; i++) {
thaysogannhat(a[i]); }
} Kĩ thuật xử lý mảng con 293/ Liệt kê tất cả các mảng con voi d lietkecon(int a[], int n) { int ChieuDai; for (i nt i =0; i<n; i++) {
for (ChieuDai = 1; ChieuDai<=n; ChieuDai ++) {
for(int j=i; j<ChieuDai; j++) {
printf("% 4d", a[j]); }
printf("\n");
}
}
} 294/ Liệt kê mảng con có độ dài lớn hơn 2 ptử voi d lietkecon(int a[], int n) { int ChieuDai; for (i nt i =0; i<n; i++) {
for (ChieuDai = 3+i; ChieuDai<=n; ChieuDai++) {
for(int j=i; j<ChieuDai; j++) {
printf("% 4d", a[j]); }
printf("\n");
}
}
} 295/ Liệt kê dãy con tăng dần int ktramangtang (int b[], i nt nb) { for(int i=0; i<nb-1 ; i++) {
if (b[i ]>b[i+1 ]) retur n 0; }
retur n 1;
}
voi d xuatmangcon(int b[], int nb)
Trang 50int max = a[0 ];
for (i nt i =1; i<n; i++)
Trang 51{
int ChieuDai;
int b[100], nb;
for (i nt i =0; i<n; i++)
{
for (ChieuDai = 1; ChieuDai<=n; ChieuDai ++) {
nb=0; for(int j=i; j<ChieuDai; j++) {
b[nb]=a[j]; nb++; }
if (ktramangtang(b,nb)==1) {
if (ktrac omax(b,nb,max)==1) {
xuatmangcon(b,nb); }
}
}
}
} 297/ Tính tổng từng mảng con tăng int ktramangtang (int b[], i nt nb) { for(int i=0; i<nb-1 ; i++) {
if (b[i ]>b[i+1 ]) retur n 0; }
retur n 1; } voi d xuatmangcon(int b[], int nb) { for(int i=0; i<nb; i++) {
printf(" % d ", b[i]); }
} intt tongmangc on(int b[], i nt nb) { intt s=0; for (i nt i =0; i<nb; i++) {
s = s + b[i]; }
retur n s; } voi d lietkecontang(int a[], int n) { int chieudaicon, b[100], nb, tong ; for (i nt i =0; i<n; i++) {
for (chieudaicon = 1+i; chieudaic on<=n; c hieudaicon++) {
for(int j=i; j<chieudaicon; j++) {
b[nb]=a[j]; nb++; }
if (ktramangtang(b,nb)==1) {
xuatmangcon(b,nb); tong = tong mangcon(b,nb); printf("\tTong mang nay: % 2f\n", tong); }
Trang 52}
}
}
298/ Đếm mảng con tăng có độ dài lớn hơn 1
int ktramangtang (int b[], i nt nb)
299/ Liệt kê dãy con toàn dương và độ dài lớn hơn 1
int ktramang duong(fl oat b[], int nb)
Trang 53}
retur n test;
}
302/ Đếm số lần xuất hiện mảng a trong mảng b
int De m(int a[], int b[], int na, int nb)
{
int i,j,test,de m=0;
Trang 54for (i =0; i <nb; i++)
{
if (b[i ]==a[0]) {
int h = i; for (test=1, j=0; j<na;j++,h++) {
if (a[j] != b[h]) {
test = 0; bre ak; }
}
if (test == 1) de m++; }
}
retur n de m; } 303/ Dãy con toàn dương dài nhất voi d DayConToanDuongDaiNhat(int a[], i nt n) { int i,l,k,test,vt,pt=0; for (i =0;i<n;i++) {
for (l=i; l <=n;l++) {
for (test = 1,k=0; k<l ; k++) {
if (a[k]<0) {
test = 0; break; }
}
if (test == 1) {
if (pt<k) {
pt=k; vt=i ; }
}
}
}
printf("\nDay c on duong dai nhat: "); for (vt; vt<pt; vt++) printf("% 4d",a[vt]); } 304 * Cho mảng a, số nguyên M.Tìm 1 mảng con sao cho tổng các ptử bằng M voi d Tong MangConB ang M(int a[], int n,int m) { int i,l,k,s=0; for (i =0;i<n;i++) {
for (l=i; l <=n;l++) {
for (k=0; k<l ; k++) s+=a[k]; if (s == m) {
printf("\nDay c on co tong ptu bang M: "); for (k=0; k<l ; k++) printf("% 4d",a[k]); }