mang 1 chieu-3
276/ Xóa tất cả các ptử trùng với x .
voi d xoavi tri(fl oat a[], int & n, float k)
{
for (int i=k; i <n; i++)
{
}
n--;
}
a[i ] = a[i+1];
voi d xoamang(float a[], int &n, fl oat x)
{
for (int i=0; i <n; i++)
{
if (a[i] ==x)
{
xoavi tri(a,n,i );
i--;
}
}
}
277/ Xóa tất cả số nguyê n tố trong mảng .
voi d xoavi tri(int a[], int &n, int k)
{
for (int i=k; i <n; i++)
{
}
n--;
}
a[i] = a[i +1];
int s onguyento(int n)
{
for (int i=2; i <n; i++)
{
if (n% i==0)
re turn 0;
}
return 1 ;
}
voi d xoamang(int a[], int & n)
{
for (int i=0; i <n; i++)
{
if (a[i]>=2)
{
i f (s onguye nto(a[i ])==1)
{
xoavitri(a,n,i);
i --;
}
}
}
}
278/ xóa tất cả ptử trùng nhau trong mảng và chỉ giữ lại duy nhất 1 ptử .
voi d xoavitri(int a[], i nt &n, int k)
{
for (i nt i =k; i<n; i ++)
{
}
n--;
}
a[i] = a[i +1];
voi d xoamang(int a[], int &n)
{
for (i nt i =0; i<n-1; i++)
{
for(int j=i+1 ; j<n;j++)
{
if (a[i]==a[j])
{
xoavi tri(a,n,j);
j--;
}
}
}
}
279/ 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)
{
for (int i=k; i <n; i++)
{
}
n--;
}
a[i] = a[i+1];
voi d xoamang(int a[], int &n)
{
for (int i=0; i <n -1; i++)
{
for (int tes t = 0,j=i+1; j<n;j++) // xóa ptử tại j
{
if (a[i]==a[j])
{
xoavi tri(a,n,j);
j--;
tes t=1;
}
}
if (tes t == 1)
{
xoavi tri(a,n,i); //Xóa luôn chính nó
}
}
}
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)
{
for(int i = k ; i>0; i--)
{
a[i] = a[i -1];
}
a[0] = 1;
}
voi d duaMotve dau(int a[], int n)
{
for (i nt i =0; i<n; i++)
{
if (a[i] == 1)
{
DoiCho(a,n,i); // vi tri i
}
}
}
281/ Hãy đưa chẵn về đầu, lẻ về cuối, ptử 0 nằm giữa mảng .
voi d duachanve dau(int a[], int k)
{
int tam = a[k];
for(int i = k ; i>0; i--)
{
a[i] = a[i -1];
}
a[0] = tam;
}
voi d dua0(int a[], int k, int vi trichancuoi)
{
for(int i = k ; i>vi trichancuoi; i --)
{
a[i] = a[i -1];
}
a[vi trichancuoi] = 0;
}
voi d s apxe p(int a[], int n)
{
int i;
int vitrichanc uoi ;
for (i =0; i <n; i++)
{
if (a[i] % 2 == 0 && a[i]!=0)
{
duac hanve dau(a,i); // vi tri i
}
}
for (i =0; i <n; i++)
{
if (a[i]% 2!=0)
{
vi trichancuoi = i;
bre ak;
}
}
for (i ; i<n; i ++)
{
if (a[i] == 0 )
{
dua0(a,i,vitrichanc uoi); // vi tri i
}
}
}
282/ Đưa các số chia hế t cho 3 về đầu mảng .
voi d DoiCho(int a[], int n, int k)
{
int tam = a[k];
for(int i = k ; i>0; i--)
{
a[i] = a[i -1];
}
a[0] = tam;
}
voi d c hiahetchoba(int a[], int n)
{
for (i nt i =0; i<n; i++)
{
if (a[i] % 3 == 0)
{
DoiCho(a,n,i); // vi tri i
}
}
}
283/ Đảo ngược mảng ban đầu .
voi d hoanvi(i nt & a, int & b)
{
int tam = a;
a = b;
b =tam;
}
voi d DaoMang(int a[], int n)
{
for (i nt i =0,j=n -1; i<j; i++,j --)
{
hoanvi (a[i],a[j]);
}
}
284/ Đảo ngược thứ tự các số chẵn trong mảng .
voi d hoanvi(i nt & a, int & b)
{
int tam = a;
a = b;
b =tam;
}
voi d daoc han(int a[], int n)
{
for (i nt i =0; i<n-1; i++)
{
for (int j = i+1 ; j<n; j++)
{
if (a[j]% 2==0 &&a[i] % 2 == 0)
{
hoanvi (a[i],a[j]);
}
}
}
}
285/ Đảo ngược thứ tự số dương trong mảng .
voi d hoanvi(i nt & a, int & b)
{
int tam = a;
a = b;
b =tam;
}
voi d daoduong(int a[], i nt n)
{
for (i nt i =0; i<n-1; i++)
{
for (int j = i+1 ; j<n; j++)
{
if (a[j]>0 && a[i]> 0)
{
hoanvi (a[i],a[j]);
}
}
}
}
286/ 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++)
{
a[i]=a[i+1];
}
a[n -1]= tam;
}
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--)
{
a[i]=a[i-1];
}
a[0]= tam;
}
288/Hãy xuất ptử trong mảng theo yê u cầu: chẵn vàng, lẻ trắng .
voi d c olor (int a)
{
HANDLE mau;
mau = Ge tStdHandle(STD_O UTP UT_ HANDLE); SetCons ole TextAttri bute(mau,a);
}
voi d XuatChanVang Le Trang(int a[], int n)
{
for (i nt i =0; i<n; i++)
{
if (a[i]% 2==0)
{
}
els e
{
}
}
}
col or(14);
printf("% 4d",a[i]);
col or(7);
printf("% 4d",a[i]);
289/ Xuất mảng: chẵn nằm trê n 1 hàng, lẻ nằm hàng tiếp theo .
voi d c hanlehaihang(int a[], int n)
{
for (i nt i =0; i<n; i++)
{
if (a[i]% 2==0)
{
printf("% 4d",a[i]);
}
}
printf("
\t");
for (i =0; i <n; i++)
{
if (a[i]% 2!=0)
{
printf("% 4d",a[i]);
}
}
}
290/ Đả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)
{
int tam = a;
a = b;
b =tam;
}
voi d daonguocc hanle(int a[], int n)
{
int i, j;
for (i =0; i <n; i++)
{
for(j=i +1; j<n; j++)
{
if (a[i]% 2==0 && a[j]% 2 == 0)
hoanvi (a[i],a[j]);
els e if (a[i]% 2!=0 && a[j]% 2!=0)
hoanvi (a[i],a[j]);
}
}
}
291/ B iế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)
{
max=a[0];
min=a[0];
for (i nt i =1; i<n; i++)
{
max=(max<a[i ])?a[i]:max;
min=(min>a[i])?a[i]:min;
}
}
voi d biendoi(int a[], int n, int max, int min)
{
for(int i=0; i<n; i ++)
{
if (a[i]==max)
{
a[i]=min;
}
els e if (a[i]==min)
{
a[i]=max;
}
}
}
292/ B iến đổi mảng bằng cách thay tất cả ptử trong mảng bằng số nguyê n gần nó nhất .
voi d thays ogannhat(fl oat &n)
{
int phannguyen = (int) (n) ;
fl oat phanle = n - phannguye n;
if (phanle <=0.5)
{
}
els e
{
}
}
n = (fl oat)phannguye n;
n = (fl oat)phannguye n + 1;
voi d biendoi(float a[], int n)
{
for (i nt i =0; i<n; i++)
{
thays ogannhat(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("
");
}
}
}
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("
");
}
}
}
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)
{
for(int i=0; i<nb; i++)
{
printf("% 4d", b[i]);
}
printf("
");
}
voi d lietkecontang(int a[], int n)
{
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)
{
xuatmangcon(b,nb);
}
}
}
}
296/ Liệt kê dãy con tăng và chứa giá trị lớn nhất .
int lonnhat(int a[], int n)
{
int max = a[0 ];
for (i nt i =1; i<n; i++)
{
max = max<a[i]?a[i]:max;
}
retur n max;
}
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("% 4d", b[i]);
}
printf("
");
}
int ktrac omax(int b[], i nt nb,i nt max)
{
for (i nt i =0; i<nb;i++)
{
if (b[i ]==max)
{
retur n 1;
}
}
retur n 0;
}
voi d lietkecontang(int a[], int n, int max)
{
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
", tong);
}
}
}
}
298/ Đế m mảng con tăng có độ dài lớn hơn 1 .
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 De mc ontang(int a[], int n)
{
int chieudaicon, b[100], nb;
int de m=0;
for (i nt i =0; i<n; i++)
{
for (chieudaicon = 2+i; chieudaic on<=n; c hieudaicon++)
{
for(int j=i; j<chieudaicon; j++)
{
b[nb]=a[j];
nb++;
}
if (ktramangtang(b,nb)==1)
{
de m++;
}
}
}
printf("
Tong s o mang c an ti m: % d
", de m);
}
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)
{
for(int i=0; i<nb; i++)
if (b[i ]<0)
retur n 0;
retur n 1;
}
voi d xuatmangcon(fl oat b[], int nb)
{
for(int i=0; i<nb; i++)
printf(" % .2f ", b[i]);
printf("
");
}
voi d lietkecontang(float a[], int n)
{
int chieudaicon;
fl oat b[100];
int nb;
for (i nt i =0; i<n; i++)
{
for (chieudaicon = 2+i; chieudaic on<=n; c hieudaicon++)
{
for(int j=i; j<chieudaicon; j++)
{
b[nb]=a[j];
nb++;
}
if (ktramang duong(b,nb)==1)
xuatmangcon(b,nb);
}
}
}
300/ Đế m mảng con giảm .
int ktramanggiam(float b[], int nb)
{
for(int i=0; i<nb-1 ; i++)
{
if (b[i ]<b[i+1 ])
retur n 0;
}
retur n 1;
}
voi d De mc ongiam(fl oat a[], int n)
{
int chieudaicon;
fl oat b[100];
int nb;
int de m=0;
for (i nt i =0; i<n; i++)
{
for (chieudaicon = 1+i; chieudaic on<=n; c hieudaicon++)
{
nb=0;
for(int j=i; j<chieudaicon; j++)
{
b[nb]=a[j];
nb++;
}
if (ktramanggiam(b,nb)==1)
de m++;
}
}
printf("
Tong s o mang c on giam c an ti m: % d
", de m);
}
301/ Cho biết mảng a có phải là mảng con trong mảng b ko?
int Ktr a(i nt a[], int b[], i nt na, int nb)
{
int i,j,tes t = 0;
for (i =0; i <nb; i++)
{
if (b[i ]==a[0])
{
int h = i;
for (tes t=1, j=0; j<na;j++,h++)
{
if (a[j] != b[h])
{
tes t = 0;
bre ak;
}
}
if (tes t == 1)
retur n tes t; // Mảng a l à c on mảng b
}
}
retur n tes t;
}
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,tes t,de m=0;
for (i =0; i <nb; i++)
{
if (b[i ]==a[0])
{
int h = i;
for (tes t=1, j=0; j<na;j++,h++)
{
if (a[j] != b[h])
{
tes t = 0;
bre ak;
}
}
if (tes t == 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,tes t,vt,pt=0;
for (i =0;i<n;i++)
{
for (l=i; l <=n;l++)
{
for (tes t = 1,k=0; k<l ; k++)
{
if (a[k]<0)
{
tes t = 0; break;
}
}
if (tes t == 1)
{
if (pt<k)
{
pt=k;
vt=i ;
}
}
}
}
printf("
Day 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 s ao 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("
Day c on co tong ptu bang M: ");
for (k=0; k<l ; k++)
printf("% 4d",a[k]);
}
}
}
}
305 * Tìm dãy con toàn dương có tổng lớn nhất .
voi d DayConToanDuong TongLonNhat(int a[], int n)
{
int i,l,k,s =0,Stam=0,tes t,vt,pt;
for (i =0;i<n;i++)
{
for (l=i; l <=n;l++)
{
for (tes t=1,k=0; k<l ; k++)
{
Stam+=a[k];
if (a[k]<0)
{
tes t = 0; break;
}
}
if (tes t == 1)
{
if (Stam>s )
{
s = Stam;
vt = i;
pt = k;
}
}
}
}
printf("
Day c on duong co tong lon nhat: ");
for (vt; vt<pt; vt++)
printf("% 4d",a[vt]);
}
306/ Tìm mảng con có tổng lớn nhất .
voi d DayConTong LonNhat(int a[], int n)
{
int i,l,k,s =0,Stam=0,vt,pt;
for (i =0;i<n;i++)
{
for (l=i; l <=n;l++)
{
for (k=0; k<l ; k++) Stam+=a[k];
if (Stam>s )
{
s = Stam;
vt = i;
pt = k;
}
}
}
printf("
Day c on co tong l on nhat: ");
for (vt; vt<pt; vt++)
printf("% 4d",a[vt]);
}
Xây dựng mảng
307/ Tạo mảng b chỉ chứa giá trị lẻ từ mảng a .
voi d TaoMangB(i nt a[], int n)
{
int b[100], nb=0;
for (i nt i =0; i<n;i ++)
{
if (a[i]% 2!=0)
{
b[nb] = a[i];
nb++;
}
}
xuatmang(b,nb);
}
308/ Tạo mảng b chỉ chứa giá trị âm từ mảng a .
voi d TaoMangB(i nt a[], int n)
{
int b[100], nb=0;
for (i nt i =0; i<n;i ++)
{
if (a[i]<0 )
{
b[nb] = a[i];
nb++;
}
}
xuatmang(b,nb);
}
309/ Tạo mảng b s ao cho b[i] = tổng các ptử lận cận với a[i] trong mảng a .
voi d TaoMangB(i nt a[], int n)
{
int b[100], nb=0;
for (i nt i =0; i<n;i ++)
{
if (i==0)
b[nb] = a[i +1];
els e if (i==n-1)
b[nb] = a[i-1 ];
els e
nb++;
}
b[nb] = a[i-1 ] + a[i+1];
xuatmang(b,nb);
}
310/ Tạo mảng b chỉ chứa số nguyê n tố từ mảng a .
int SoNguyenTo(i nt a)
{
if (a<=1 )
retur n 0;
for (i nt i =2; i<a; i++)
if (a% i==0)
retur n 0;
retur n 1;
}
voi d TaoMangB(i nt a[], int n)
{
int b[100], nb=0;
for (i nt i =0; i<n;i ++)
{
if (SoNguyenTo(a[i])==1)
{
b[nb] = a[i];
nb++;
}
}
xuatmang(b,nb);
}
----------Hế t Mảng 1 chiề u --------
B ài tổng hợp nâng cao chút của mảng 1 chiề u
311/ Tạo 1 mảng ngẫu nhiê n và xuất ra dãy con tăng dần dài nhất. Nế u 2 dãy con tăng dài bằng
nhau thì xuất dãy con tăng đầu tiê n .
#include <s tdio.h>
#include <s tdli b.h>
#include <ti me.h>
voi d NhapMang(i nt a[], int &n)
{
n = r and()% 10;
for (i nt i =0; i<n; i++)
a[i] = r and()% 50;
}
voi d XuatMang(i nt a[], int n)
{
for (i nt i =0; i<n; i++)
printf("% 4d",a[i]);
}
voi d Ti mDayConTangDan(int a[], int n, int &Vi TriBatDau, int & ViTri Ke tThuc )
{
int Vi TriBatDauTam =0, ViTri Ke tThuc Tam=0;
int De m =0, De mTam = 0;
for (Vi Tri KetThuc Tam = 0; ViTri Ke tThuc Tam<n; ViTri KetThuc Tam++)
{
if (a[Vi Tri KetThuc Tam] <= a[ViTri Ke tThuc Tam+1])
{
}
els e
{
De mTam++;
if (De mTam>De m)
{
Vi TriBatDau = Vi TriBatDauTam;
Vi Tri KetThuc = Vi Tri KetThucTam; De m = De mTam;
}
Vi TriBatDauTam = Vi Tri KetThucTam + 1 ; De mTam = 0;
}
}
}
voi d XuatDayCon(int a[], int Vi TriBatDau, int ViTri Ke tThuc )
{
for(int i=Vi TriBatDau; i<=Vi Tri KetThuc; i++)
pri ntf("% 4d",a[i]);
}
voi d main()
{
s rand((uns igned)ti me(NULL));
int n,a[100];
NhapMang (a,n); //Nh ập mảng ngẫu nhiên printf("Mang ngau nhien duoc tao: "); XuatMang(a,n);
printf("
");
//Tì m dãy c on tăng dài nh ất
int Vi TriBatDau = -1, ViTri Ke tThuc = -1; TimDayConTangDan(a,n,Vi TriBatDau,Vi Tri KetT huc);
//Xu ất dãy con tăng với 2 biến Vi TriBatDau, Vi Tri KetThuc
printf("Day c on tang dai nhat: "); XuatDayCon(a,ViTriBatDau,ViTri Ke tThuc );
}
Bạn đang đọc truyện trên: Truyen247.Pro