Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
288,23 KB
Nội dung
} } } } 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) { [...]... lận cận với a[i] trong mảng a voi d TaoMangB(i nt a[], int n) { int b [10 0], nb=0; for (i nt i =0; i . 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 31 1 / 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. (i==n -1) b[nb] = a[i -1] ; else b[nb] = a[i -1] + a[i +1] ; nb++; } xuatmang(b,nb); } 31 0 / Tạo mảng b chỉ chứa số nguyên tố từ mảng a . int SoNguyenTo(int a) { if (a< =1) . (ktramangduong(b,nb)= =1) xuatmangcon(b,nb); } } } 30 0/ Đế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;