Tải bản đầy đủ (.pdf) (19 trang)

Chuyên đề mảng 1 chiều phần 3 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (288.23 KB, 19 trang )

}
}
}
}
void TronMang(int a[], int b[], int c[], int na, int nb, int &nc)
{
nc = na + nb;
sapxep(a,na); //Sap xep tang mang A
sapxep(b,nb); //Sap xep tang mang B
int vta=0,vtb=0;
for (int i=0;i<nc;i++)
{
if (vta < na && vtb < nb)
{
if (a[vta] < b[vtb])
{
c[i] = a[vta];
vta++;
}
else
{
c[i] = b[vtb];
vtb++;
}
}
else if (vtb == nb)
{
c[i] = a[vta];
vta++;
}
else


{
c[i] = b[vtb];
vtb++;
}
}
}

265/ Cho 2 mảng tăng. Hãy trộn thành 1 mảng giảm dần
void sapxep(int a[],int n)
{
for (int i=0;i<n;i++)
{
for (int j=i+1;j<n;j++)
{
if (a[i]>a[j])
{
int temp=a[i];
a[i] = a[j];
a[j]=temp;
}
}
}
}
void TronMang(int a[], int b[], int c[], int na, int nb, int &nc)
{
nc = na + nb;
sapxep(a,na); //Sap xep tang mang A
sapxep(b,nb); //Sap xep tang mang B
int vta=na-1, vtb=nb-1;
for (int i=0;i<nc;i++)

{
if (vta >= 0 && vtb >= 0)
{
if (a[vta] > b[vtb])
{
c[i] = a[vta];
vta ;
}
else
{
c[i] = b[vtb];
vtb ;
}
}
else if (vtb < 0)
{
c[i] = a[vta];
vta ;
}
else
{
c[i] = b[vtb];
vtb ;
}
}
}


Kĩ thuật thêm
266/ Thêm 1 ptử x vào mảng tại vị trí k .

void themgiatri(int a[], int &n, int x, int k)
{
for (i=n; i>k; i )
{
a[i] = a[i-1];
}
a[k] = x;
n++;
}

267/ Hàm nhập mảng sao cho khi nhập xong thì giá trị trong mảng sắp xếp giảm dần .
void nhapmang(int a[], int &n)
{
printf("Nhap mang 1 chieu\n");
printf("Nhap n : "); scanf("%d",&n);
while (n<=1)
{
printf("Nhap lai n : " );
scanf("%d",&n);
}
int i,j,k;
for (i=0; i<n; i++)
{
printf("\tNhap a[%d] : ", i);
scanf("%d",&a[i]);
for (j=0; j<i;j++)
{
if (a[i]>a[j])
{
int temp = a[i];

for (k = i; k>j; k )
{
a[k] = a[k-1];
}
a[j] = temp;
break;
}
}
}
}

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 .
void ChenXMangTang(int a[], int &n, int x)
{
int i,j;
for (i=0; i<n;i++)
{
if (x>a[i])
{
int temp = x;
for (k = n; k>i; k )
{
a[k] = a[k-1];
}
a[i] = temp;
break;
}
}
n++;

}


270/ Nhập mảng sau khi nhập xong đã tự sắp xếp tăng dần
void nhapmang(int a[], int &n)
{
printf("Nhap mang 1 chieu\n");
printf("Nhap n : "); scanf("%d",&n);
while (n<=1)
{
printf("Nhap lai n : " );
scanf("%d",&n);
}
int i,j,k;
for (i=0; i<n; i++)
{
printf("\tNhap a[%d] : ", i);
scanf("%d",&a[i]);
for (j=0; j<i;j++)
{
if (a[i]>a[j])
{
int temp = a[i];
for (k = i; k>j; k )
{
a[k] = a[k-1];
}
a[j] = temp;
break;
}

}
}
}


Kĩ thuật xóa
271/ Xóa các ptử có chỉ số k trong mảng
void Xoavitri(int a[], int &n, int k)
{
for(int i=k; i<n;i++)
{
a[i] = a[i+1];
}
n ;
}

272/ hãy xóa tất cả số lớn nhất trong mảng các số thực
void xoavitri(float a[], int &n, int k)
{
for (int i=k; i<n; i++)
{
a[i] = a[i+1];
}
n ;
}
float lonnhat(float a[], int n)
{
float max = a[0];
for (int i=1; i<n ; i++)
{

max=(max<a[i])?a[i]:max;
}
return max;
}
void xoamang(float a[], int &n)
{
float max = lonnhat(a,n);
for (int i=0; i<n; i++)
{
if (a[i]==max)
{
xoavitri(a,n,i);
i ;
}
}
}

273/ Xóa tất cả số âm trong mảng .
void xoavitri(float a[], int &n, int k)
{
for (int i=k; i<n; i++)
{
a[i] = a[i+1];
}
n ;
}
void xoamang(float a[], int &n)
{
for (int i=0; i<n; i++)
{

if (a[i]<0)
{
xoavitri(a,n,i);
i ;
}
}
}


274/ Xóa tất cả số chẵn trong mảng .
void xoavitri(float a[], int &n, int k)
{
for (int i=k; i<n; i++)
{
a[i] = a[i+1];
}
n ;
}
void xoamang(float a[], int &n)
{
for (int i=0; i<n; i++)
{
if (a[i]%2==0)
{
xoavitri(a,n,i);
i ;
}
}
}


275/ Xóa tất cả số chính phương trong mảng .
void xoavitri(int a[], int &n, int k)
{
for (int i=k; i<n; i++)
{
a[i] = a[i+1];
}
n ;
}
int sochinhphuong(int n)
{
int a = (int)sqrt(n);
if (a*a == n)
{
return 1;
}
return 0;
}
void xoamang(int a[], int &n)
{
for (int i=0; i<n; i++)
{
if (sochinhphuong(a[i])==1)
{
xoavitri(a,n,i);
i ;
}
}
}


276/ Xóa tất cả các ptử trùng với x .
void xoavitri(float a[], int &n, float k)
{
for (int i=k; i<n; i++)
{
a[i] = a[i+1];
}
n ;
}
void xoamang(float a[], int &n, float x)
{
for (int i=0; i<n; i++)
{
if (a[i] ==x)
{
xoavitri(a,n,i);
i ;
}
}
}

277/ Xóa tất cả số nguyên tố trong mảng .
void xoavitri(int a[], int &n, int k)
{
for (int i=k; i<n; i++)
{
a[i] = a[i+1];
}
n ;
}

int songuyento(int n)
{
for (int i=2; i<n; i++)
{
if (n%i==0)
return 0;
}
return 1;
}
void xoamang(int a[], int &n)
{
for (int i=0; i<n; i++)
{
if (a[i]>=2)
{
if (songuyento(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ử .
void xoavitri(int a[], int &n, int k)
{
for (int i=k; i<n; i++)

{
a[i] = a[i+1];
}
n ;
}
void xoamang(int a[], int &n)
{
for (int i=0; i<n-1; i++)
{
for(int j=i+1; j<n;j++)
{
if (a[i]==a[j])
{
xoavitri(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 .
void xoavitri(int a[], int &n, int k)
{
for (int i=k; i<n; i++)
{
a[i] = a[i+1];
}
n ;
}
void xoamang(int a[], int &n)

{
for (int i=0; i<n-1; i++)
{
for(int test = 0,j=i+1; j<n;j++) //xóa ptử tại j
{
if (a[i]==a[j])
{
xoavitri(a,n,j);
j ;
test=1;
}
}
if (test == 1)
{
xoavitri(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 .
void DoiCho(int a[], int n, int k)
{
for(int i = k ; i>0; i )
{
a[i] = a[i-1];
}
a[0] = 1;
}

void duaMotvedau(int a[], int n)
{
for (int 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 .
void duachanvedau(int a[], int k)
{
int tam = a[k];
for(int i = k ; i>0; i )
{
a[i] = a[i-1];
}
a[0] = tam;
}
void dua0(int a[], int k, int vitrichancuoi)
{

for(int i = k ; i>vitrichancuoi; i )
{
a[i] = a[i-1];
}
a[vitrichancuoi] = 0;
}

void sapxep(int a[], int n)
{
int i;
int vitrichancuoi;
for (i=0; i<n; i++)
{
if (a[i] %2 == 0 && a[i]!=0)
{
duachanvedau(a,i); //vi tri i
}
}
for (i=0; i<n; i++)
{
if (a[i]%2!=0)
{
vitrichancuoi = i;
break;
}
}
for (i; i<n; i++)
{
if (a[i] == 0 )
{
dua0(a,i,vitrichancuoi); //vi tri i
}
}
}

282/ Đưa các số chia hết cho 3 về đầu mảng .
void 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;
}
void chiahetchoba(int a[], int n)
{
for (int 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 .
void hoanvi(int &a, int &b)
{
int tam = a;
a = b;
b =tam;
}
void DaoMang(int a[], int n)
{
for (int 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 .
void hoanvi(int &a, int &b)
{
int tam = a;
a = b;
b =tam;
}
void daochan(int a[], int n)
{
for (int 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 .
void hoanvi(int &a, int &b)
{
int tam = a;
a = b;

b =tam;
}
void daoduong(int a[], int n)
{
for (int 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 .
void dichtrai(int a[], int n)
{
int tam = a[0];
for (int 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

void dichphai(int a[], int n)

{
int tam = a[n-1];
for (int 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 .
void color (int a)
{
HANDLE mau;
mau = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(mau,a);
}
void XuatChanVangLeTrang(int a[], int n)
{
for (int i=0; i<n; i++)
{
if (a[i]%2==0)
{
color(14);
printf("%4d",a[i]);
}
else
{
color(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 .
void chanlehaihang(int a[], int n)
{
for (int i=0; i<n; i++)
{
if (a[i]%2==0)
{
printf("%4d",a[i]);
}
}
printf("\n\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 .
void hoanvi(int &a, int &b)
{
int tam = a;
a = b;
b =tam;
}

void daonguocchanle(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]);
else if (a[i]%2!=0 && a[j]%2!=0)
hoanvi(a[i],a[j]);
}
}
}

291/ Biến đổi mảng bằng cách thay giá trị max = giá trị min và ngc lại .
void minmax(int a[], int n, int &max, int &min)
{
max=a[0];
min=a[0];
for (int i=1; i<n; i++)
{
max=(max<a[i])?a[i]:max;
min=(min>a[i])?a[i]:min;
}
}
void biendoi(int a[], int n, int max, int min)
{
for(int i=0; i<n; i++)
{

if (a[i]==max)
{
a[i]=min;
}
else if (a[i]==min)
{
a[i]=max;
}
}
}

292/ Biế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 .
void thaysogannhat(float &n)
{
int phannguyen = (int) (n) ;
float phanle = n - phannguyen;
if (phanle <=0.5)
{
n = (float)phannguyen;
}
else
{
n = (float)phannguyen + 1;
}
}
void biendoi(float a[], int n)
{
for (int 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 .
void lietkecon(int a[], int n)
{
int ChieuDai;
for (int 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ử .
void lietkecon(int a[], int n)
{
int ChieuDai;
for (int 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[], int nb)
{
for(int i=0; i<nb-1; i++)
{
if (b[i]>b[i+1])
return 0;
}
return 1;
}
void xuatmangcon(int b[], int nb)
{
for(int i=0; i<nb; i++)
{
printf("%4d", b[i]);
}
printf("\n");
}
void lietkecontang(int a[], int n)
{

int ChieuDai;
int b[100], nb;
for (int 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 (int i=1; i<n; i++)
{
max = max<a[i]?a[i]:max;
}
return max;
}

int ktramangtang(int b[], int nb)
{
for(int i=0; i<nb-1; i++)
{
if (b[i]>b[i+1])
return 0;
}
return 1;
}
void xuatmangcon(int b[], int nb)
{
for(int i=0; i<nb; i++)
{
printf("%4d", b[i]);
}
printf("\n");
}
int ktracomax(int b[], int nb,int max)
{
for (int i=0; i<nb;i++)
{
if (b[i]==max)
{
return 1;
}
}
return 0;
}
void lietkecontang(int a[], int n, int max)
{

int ChieuDai;
int b[100], nb;
for (int 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 (ktracomax(b,nb,max)==1)
{
xuatmangcon(b,nb);
}
}
}
}
}

297/ Tính tổng từng mảng con tăng .
int ktramangtang(int b[], int nb)
{
for(int i=0; i<nb-1; i++)
{
if (b[i]>b[i+1])
return 0;

}
return 1;
}
void xuatmangcon(int b[], int nb)
{
for(int i=0; i<nb; i++)
{
printf(" % d ", b[i]);
}
}
intt tongmangcon(int b[], int nb)
{
intt s=0;
for (int i=0; i<nb; i++)
{
s = s + b[i];
}
return s;
}
void lietkecontang(int a[], int n)
{
int chieudaicon, b[100], nb, tong;
for (int i=0; i<n; i++)
{
for (chieudaicon = 1+i; chieudaicon<=n; chieudaicon++)
{
for(int j=i; j<chieudaicon; j++)
{
b[nb]=a[j];
nb++;

}
if (ktramangtang(b,nb)==1)
{
xuatmangcon(b,nb);
tong = tongmangcon(b,nb);
printf("\tTong mang nay: %.2f\n", tong);
}
}
}
}


298/ Đếm mảng con tăng có độ dài lớn hơn 1 .
int ktramangtang(int b[], int nb)
{
for(int i=0; i<nb-1; i++)
{
if (b[i]>b[i+1])
return 0;
}
return 1;
}
void Demcontang(int a[], int n)
{
int chieudaicon, b[100], nb;
int dem=0;
for (int i=0; i<n; i++)
{
for (chieudaicon = 2+i; chieudaicon<=n; chieudaicon++)
{

for(int j=i; j<chieudaicon; j++)
{
b[nb]=a[j];
nb++;
}
if (ktramangtang(b,nb)==1)
{
dem++;
}
}
}
printf("\nTong so mang can tim: %d\n", dem);
}

299/ Liệt kê dãy con toàn dương và độ dài lớn hơn 1 .
int ktramangduong(float b[], int nb)
{
for(int i=0; i<nb; i++)
if (b[i]<0)
return 0;
return 1;
}
void xuatmangcon(float b[], int nb)
{
for(int i=0; i<nb; i++)
printf(" % .2f ", b[i]);
printf("\n");
}
void lietkecontang(float a[], int n)
{

int chieudaicon;
float b[100];
int nb;
for (int i=0; i<n; i++)
{
for (chieudaicon = 2+i; chieudaicon<=n; chieudaicon++)
{
for(int j=i; j<chieudaicon; j++)
{
b[nb]=a[j];
nb++;
}
if (ktramangduong(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])
return 0;
}
return 1;
}
void Demcongiam(float a[], int n)

{
int chieudaicon;
float b[100];
int nb;
int dem=0;
for (int i=0; i<n; i++)
{
for (chieudaicon = 1+i; chieudaicon<=n; chieudaicon++)
{
nb=0;
for(int j=i; j<chieudaicon; j++)
{
b[nb]=a[j];
nb++;
}
if (ktramanggiam(b,nb)==1)
dem++;
}
}
printf("\nTong so mang con giam can tim: %d\n", dem);
}


301/ Cho biết mảng a có phải là mảng con trong mảng b ko?
int Ktra(int a[], int b[], int na, int nb)
{
int i,j,test = 0;
for (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;
break;
}
}
if (test == 1)
return test; //Mảng a là con mảng b
}
}
return test;
}


302/ Đếm số lần xuất hiện mảng a trong mảng b .
int Dem(int a[], int b[], int na, int nb)
{
int i,j,test,dem=0;
for (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;
break;
}
}
if (test == 1)
dem++;
}
}
return dem;
}


303/ Dãy con toàn dương dài nhất .
void DayConToanDuongDaiNhat(int a[], int 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 con 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 .
void TongMangConBangM(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 con 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 .
void DayConToanDuongTongLonNhat(int a[], int n)
{
int i,l,k,s=0,Stam=0,test,vt,pt;
for (i=0;i<n;i++)
{
for (l=i; l<=n;l++)
{
for (test=1,k=0; k<l ; k++)
{
Stam+=a[k];
if (a[k]<0)
{
test = 0; break;
}
}
if (test == 1)
{
if (Stam>s)
{
s = Stam;
vt = i;
pt = k;
}
}

}
}
printf("\nDay con 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 .
void DayConTongLonNhat(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("\nDay con co tong lon 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 .
void TaoMangB(int a[], int n)
{
int b[100], nb=0;
for (int 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 .
void TaoMangB(int a[], int n)
{
int b[100], nb=0;
for (int i=0; i<n;i++)
{
if (a[i]<0)
{
b[nb] = a[i];
nb++;
}

}
xuatmang(b,nb);
}

309/ Tạo mảng b sao cho b[i] = tổng các ptử lận cận với a[i] trong mảng a .
void TaoMangB(int a[], int n)
{
int b[100], nb=0;
for (int i=0; i<n;i++)
{
if (i==0)
b[nb] = a[i+1];
else if (i==n-1)
b[nb] = a[i-1];
else
b[nb] = a[i-1] + a[i+1];
nb++;
}
xuatmang(b,nb);
}

310/ Tạo mảng b chỉ chứa số nguyên tố từ mảng a .
int SoNguyenTo(int a)
{
if (a<=1)
return 0;
for (int i=2; i<a; i++)
if (a%i==0)
return 0;
return 1;

}
void TaoMangB(int a[], int n)
{
int b[100], nb=0;
for (int 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 <stdio.h>
#include <stdlib.h>
#include <time.h>
void NhapMang(int a[], int &n)
{
n = rand()% 10;
for (int i=0; i<n; i++)
a[i] = rand()%50;
}
void XuatMang(int a[], int n)

{
for (int i=0; i<n; i++)
printf("%4d",a[i]);
}
void TimDayConTangDan(int a[], int n, int &ViTriBatDau, int &ViTriKetThuc)
{
int ViTriBatDauTam =0, ViTriKetThucTam=0;
int Dem =0, DemTam = 0;
for (ViTriKetThucTam = 0; ViTriKetThucTam<n; ViTriKetThucTam++)
{
if (a[ViTriKetThucTam] <= a[ViTriKetThucTam+1])
{
DemTam++;
}
else
{
if (DemTam>Dem)
{
ViTriBatDau = ViTriBatDauTam;
ViTriKetThuc = ViTriKetThucTam;
Dem = DemTam;
}
ViTriBatDauTam = ViTriKetThucTam + 1;
DemTam = 0;
}
}
}
void XuatDayCon(int a[], int ViTriBatDau, int ViTriKetThuc)
{
for(int i=ViTriBatDau; i<=ViTriKetThuc; i++)

printf("%4d",a[i]);
}
void main()
{
srand((unsigned)time(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("\n");
//Tìm dãy con tăng dài nhất
int ViTriBatDau = -1, ViTriKetThuc = -1;
TimDayConTangDan(a,n,ViTriBatDau,ViTriKetThuc);
//Xuất dãy con tăng với 2 biến ViTriBatDau, ViTriKetThuc
printf("Day con tang dai nhat: ");
XuatDayCon(a,ViTriBatDau,ViTriKetThuc);
}


×