mang 2 chieu-2
379 Đếm số lượng min
int GiaTriCanTim(int a[][100], int cot, int dong)
{
int dem = 0;
int Min = a[0][0];
for (int i=0; i<dong;i++)
{
for (int j=0; j<cot; j++)
{
if (Min == a[i][j])
{
dem ++ ;
}
else if (Min > a[i][j])
{
Min = a[i][j];
dem = 1;
}
}
}
return dem;
}
380 Đếm số lượng chẵn nhỏ nhất
int GiaTriCanTim(int a[][100], int cot, int dong)
{
int dem = 0;
int Min = a[0][0];
for (int i=0; i<dong;i++)
{
for (int j=0; j<cot; j++)
{
if (Min == a[i][j])
{
dem ++ ;
}
else if (Min > a[i][j])
{
Min = a[i][j];
dem = 1;
}
}
}
return dem;
}
381 Tìm giá trị xuất hiện nhiều nhất
int GiaTriCanTim(int a[][100], int cot, int dong)
{
int flag[100][100] = {0};
int GiaTri , Dem = 0,Dem1=0;
for (int i=0; i<dong; i++)
{
for(int j=0; j<cot; j++)
{
if (flag[i][j]==0)
{
for (int k=i; k<dong; k++)
{
for (int h=0; h<cot;h++)
{
if (flag[k][h]==0)
{
if (a[i][j] == a[k][h])
{
flag[k][h] = 1;
Dem++;
}
}
}
}
if (Dem > Dem1)
{
Dem1 = Dem; GiaTri = a[i][j]; Dem = 0;
}
}
}
}
return GiaTri;
}
382 Tìm số chính phương lớn nhất
int SoChinhPhuong(int n)
{
int a = sqrt (n);
if (a*a == n)
{
return 1;
}
return 0;
}
int SoChinhPhuongDauTien(int a[][100], int cot, int dong)
{
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (SoChinhPhuong(a[i][j])==1)
{
return a[i][j];
}
}
}
return -1;
}
int GiaTriCanTim(int a[][100], int cot, int dong)
{
int SoChinhPhuongMax = SoChinhPhuongDauTien(a,cot,dong);
if (SoChinhPhuongMax == -1)
{
return -1;
}
for (int i=0; i<dong;i++)
{
for (int j=0; j<cot; j++)
{
if (SoChinhPhuong(a[i][j])==1)
{
SoChinhPhuongMax = (SoChinhPhuongMax>a[i][j])?SoChinhPhuongMax:a[i][j];
}
}
}
return SoChinhPhuongMax;
}
383 Tìm số hòan thiện nhỏ nhất
int sohoanthien(int n)
{
int tong=0;
for (int i=1 ; i<n; i++)
if(n%i==0)
tong = tong + i;
if (tong == n)
return 1;
return 0;
}
int SoHoanThienDauTien(int a[][100], int cot, int dong)
{
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (SoHoanThien(a[i][j])==1)
{
return a[i][j];
}
}
}
return -1;
}
int GiaTriCanTim(int a[][100], int cot, int dong)
{
int SoHoanThienMin = SoHoanThienDauTien(a,cot,dong);
if (SoHoanThienMin == -1)
{
return -1;
}
for (int i=0; i<dong;i++)
{
for (int j=0; j<cot; j++)
{
if (SoHoanThien(a[i][j])==1)
{
SoHoanThienMin = (SoHoanThienMin<a[i][j])?SoHoanThienMin:a[i][j];
}
}
}
return SoHoanThienMin;
}
384 Tìm các chữ số xuất hiện nhiều nhất trong ma trận
void ChuSo(int n, int b[])
{
int DonVi; n = abs(n); do
{
DonVi = n%10; b[DonVi]++; n=n/10;
} while (n>0);
}
void GiaTriCanTim(int a[][100], int cot, int dong)
{
int b[10] = {0};
for (int i=0; i<dong;i++)
{
for (int j=0; j<cot; j++)
{
ChuSo(a[i][j],b);
}
}
int ChuSoNhieuNhat = 0;
for (i=1; i<10; i++)
{
if (b[ChuSoNhieuNhat] < b[i])
{
ChuSoNhieuNhat = i;
}
}
printf("Cac chu so xuat hien nhieu nhat: ");
for (i=0; i<10; i++)
{
if (b[ChuSoNhieuNhat] == b[i])
{
printf("%4d", i);
}
}
}
385 Liệt kê các dòng có tổng lớn nhất
int tong(int a[], int cot)
{
int s=0;
for (int i=0; i<cot; i++)
{
s+=a[i];
}
return s;
}
void LietKe(int a[][100], int cot, int dong)
{
int b[100];
for (int i=0; i<dong; i++)
{
b[i] = tong(a[i],cot);
}
//Tong Max
int Max = b[0];
for (i=1; i<dong; i++)
{
Max = (Max>b[i])?Max:b[i];
}
//Liet ke Tong Max
for (i = 0; i< dong ;i++)
{
if (Max == b[i])
{
printf("
Dong %d co tong ptu lon nhat la %d", i,Max);
}
}
}
386 Liệt kê các cột có tổng nhỏ nhất
void LietKe(int a[][100], int cot, int dong)
{
int b[100] = {0};
for (int i=0; i<cot; i++)
{
for (int j=0; j<dong; j++)
{
b[i]+=a[j][i];
}
}
//Tong Min
int Min = b[0];
for (i=1; i<cot; i++)
{
Min = (Min<b[i])?Min:b[i];
}
//Liet ke Tong Min for (i = 0; i< cot ;i++)
{
if (Min == b[i])
{
printf("
Cot %d co tong ptu nho nhat la %d", i,Min);
}
}
}
387 Liệt kê các dòng có nhiều số chẵn nhất
void LietKe(int a[][100], int cot, int dong)
{
int dem[100] = {0};
for (int i=0; i<dong; i++)
for (int j=0; j<cot; j++)
if (a[i][j]%2==0)
dem[i]++;
int Max = dem[0];
for (i=1; i<dong; i++)
Max = (Max>dem[i])?Max:dem[i];
for (i = 0; i< dong ;i++)
if (Max == dem[i])
printf("
Dong %d co so chan nhieu nhat la %d", i,Max);
}
388 Liệt kê các dòng có nhiều số nguyên tố nhất
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 LietKe(int a[][100], int cot, int dong)
{
int dem[100] = {0};
for (int i=0; i<dong; i++)
for (int j=0; j<cot; j++)
if (SoNguyenTo(a[i][j])==1)
dem[i]++;
int Max = dem[0];
for (i=1; i<dong; i++)
Max = (Max>dem[i])?Max:dem[i];
for (i = 0; i< dong ;i++)
if (Max == dem[i])
printf("
Dong %d co so nguyen to nhieu nhat la %d", i,Max);
}
389 Liệt kê các dòng có nhiều số hòan thiện nhất
int SoHoanThien(int n)
{
int tong=0;
for (int i=1 ; i<n; i++)
if(n%i==0)
tong = tong + i;
if (tong == n)
return 1;
return 0;
}
void LietKe(int a[][100], int cot, int dong)
{
int dem[100] = {0};
for (int i=0; i<dong; i++)
for (int j=0; j<cot; j++)
if (SoHoanThien(a[i][j])==1)
dem[i]++;
int Max = dem[0];
for (i=1; i<dong; i++)
Max = (Max>dem[i])?Max:dem[i];
for (i = 0; i< dong ;i++)
if (Max == dem[i])
printf("
Dong %d co so nguyen to nhieu nhat la %d", i,Max);
}
390 * Liệt kê các cột có nhiều chữ số nhất
void LietKe(int a[][100], int cot, int dong)
{
int dem[100] = {0};
for (int i=0; i<cot; i++)
{
for (int j=0; j<dong; j++)
{
int tam;
tam = abs(a[j][i]);
do
{
dem[i]++;
tam=tam/10;
} while (tam>0);
}
}
int Max = dem[0];
for (i=1; i<cot; i++)
Max = (Max>dem[i])?Max:dem[i];
for (i = 0; i<cot ;i++)
if (Max == dem[i])
printf("
Cot %d co nhieu chu so nhat la %d", i,Max);
}
391 * Tìm ma trận con có tổng lớn nhất
Kĩ thuật xử lý ma trận
392 Hoán vị hai dòng ma trận
void HoanVi2Dong(int a[][100],int dong, int d1, int d2)
{
int temp[100];
for (int i=0; i<cot; i++)
{
temp[i] = a[d1][i]; a[d1][i] = a[d2][i]; a[d2][i] = temp[i];
}
}
393 Hoán vị hai cột ma trận
void HoanVi2Cot(int a[][100],int cot,int c1, int c2)
{
int temp[100];
for (int i=0; i<dong; i++)
{
temp[i] = a[i][c1]; a[i][c1] = a[i][c2]; a[i][c2] = temp[i];
}
}
394 Dịch xuống xoay vòng các hàng trong ma trận
void DichXuong(int a[][100], int cot, int dong)
{
int temp[100];
for (int i=0; i<dong; i++)
{
temp[i] = a[cot-1][i];
}
for (i = cot-1; i>=1; i--)
{
for (int j=0; j<dong; j++)
{
a[i][j] = a[i-1][j];
}
}
for (i=0; i<dong; i++)
{
a[0][i] = temp[i] ;
}
}
395 Dịch lên xoay vòng các hàng trong ma trận
void DichLen(int a[][100], int cot, int dong)
{
int temp[100];
for (int i=0; i<cot; i++)
{
temp[i] = a[0][i];
}
for (i = 0; i<dong-1; i++)
{
for (int j=0; j<cot; j++)
{
a[i][j] = a[i+1][j];
}
}
for (i=0; i<cot; i++)
{
a[dong-1][i] = temp[i] ;
}
}
396 Dịch trái xoay vòng các cột trong ma trận
void DichTrai(int a[][100], int cot, int dong)
{
int temp[100];
for (int i=0; i<dong; i++)
{
temp[i] = a[i][0];
}
for (int j = 0; j<cot-1; j++)
{
for (i=0; i<dong; i++)
{
a[i][j] = a[i][j+1];
}
}
for (i=0; i<dong; i++)
{
a[i][cot-1] = temp[i] ;
}
}
397 Dịch phải xoay vòng các cột trong ma trận
void DichPhai(int a[][100], int cot, int dong)
{
int temp[100];
for (int i=0; i<dong; i++)
{
temp[i] = a[i][cot-1];
}
for (int j = cot-1; j>0; j--)
{
for (i=0; i<dong; i++)
{
a[i][j] = a[i][j-1];
}
}
for (i=0; i<dong; i++)
{
a[i][0] = temp[i] ;
}
}
398 Dịch phải xoay vòng theo chiều kim đồng hồ các giá trị nằm trên biên
void DichPhaiXoayVong(int a[][100], int n, int m) // n dòng m c?t
{
int i, j; //i dong , j cot int tam = a[0][0];
for (i=0,j=i; i< n-1; i++) //n=4, m = 5
{
a[i][j] = a[i+1][j]; //i = 3 --> dung, j =0
}
for (j,i; j< m -1; j++ )
{
a[i][j] = a[i][j+1]; //i=3 --> j = 4
}
for (i,j; i>0; i--)
{
a[i][j] = a[i-1][j]; //i = 0 --> j =4
}
for (i,j; j>1; j--)
{
a[i][j] = a[i][j-1]; //i = 0 --> j = 1
}
a[0][1] = tam;
}
399 Dịch trái xoay vòng theo chiều kim đồng hồ các giá trị nằm trên biên
void DichTraiXoayVong(int a[][100], int cot, int dong)
{
int i, j;
int tam = a[0][0];
for (i=0,j=0; j< cot-1; j++)
{
a[i][j] = a[i][j+1];
}
for (i,j; i< dong-1; i++ )
{
a[i][j] = a[i+1][j];
}
for (i,j; j>0; j--)
{
a[i][j] = a[i][j-1];
}
for (i,j; i>1; i--)
{
a[i][j] = a[i-1][j];
}
a[1][0] = tam;
}
400 Xóa 1 dòng trong ma trận
void Xoa(int a[][100], int cot, int &dong)
{
printf("Nhap chi so dong ban muon xoa");
int x,i,j;
do
{
scanf("%d", &x);
} while ( x<0 || x>=dong);
for ( i=x;i<dong-1;i++ )
{
for (j=0; j<cot;j++)
{
}
}
dong--;
}
a[i][j] = a[i+1][j];
401 Xóa 1 cột trong ma trận
void Xoa(int a[][100], int &cot, int dong)
{
printf("Nhap chi so cot ban muon xoa");
int x,i,j;
do
{
scanf("%d", &x);
} while ( x<0 || x>=cot);
for ( i=x;i<cot-1;i++ )
{
for (j=0; j<dong;j++)
{
}
}
cot--;
}
a[j][i] = a[j][i+1];
402 Xoay ma trận 1 góc 90 độ
void XoayMaTran(int a[][100], int cot, int dong)
{
for (int i=0;i<cot; i++)
{
for (int j=dong-1; j>=0; j--)
{
printf("%4d",a[j][i]);
}
printf("
");
}
}
403 Xoay ma trận 1 góc 180 độ
void XoayMaTran(int a[][100], int cot, int dong)
{
for (int i=dong-1;i>=0; i--)
{
for (int j=0; j<cot; j++)
{
printf("%4d",a[i][j]);
}
printf("
");
}
}
404 Xoay ma trận 1 góc 270 độ
void XoayMaTran(int a[][100], int cot, int dong)
{
for (int i=cot-1;i>=0; i--)
{
for (int j=0; j<dong; j++)
{
printf("%4d",a[j][i]);
}
printf("
");
}
}
405 Chiếu gương ma trận theo trục dọc
void XoayMaTran(int a[][100], int cot, int dong)
{
for (int i=0;i<dong; i++)
{
for (int j=cot-1; j>=0; j--)
{
printf("%4d",a[i][j]);
}
printf("
");
}
}
406 Chiếu gương ma trận theo trục ngang
void XoayMaTran(int a[][100], int cot, int dong)
{
for (int i=dong-1;i>=0; i--)
{
for (int j=0; j<cot; j++)
{
printf("%4d",a[i][j]);
}
printf("
");
}
}
Kĩ thuật sắp xếp
407 Sắp xếp ptử trên 1 dòng tăng dần từ trái sang phải void SapXep(int a[][100], int cot, int dong)
{
int x;
printf("Nhap dong muon sap xep: ");
scanf("%d",&x);
for (int j=0; j<cot-1; j++)
{
for (int k=j+1; k<cot;k++)
{
if (a[x][j]>a[x][k])
{
int temp = a[x][j]; a[x][j] = a[x][k]; a[x][k] = temp;
}
}
}
}
408 Sắp xếp ptử trên 1 dòng giảm dần từ trái sang phải
void SapXep(int a[][100], int cot, int dong)
{
int x;
printf("Nhap dong muon sap xep: ");
scanf("%d",&x);
for (int j=0; j<cot-1; j++)
{
for (int k=j+1; k<cot;k++)
{
if (a[x][j]<a[x][k])
{
int temp = a[x][j]; a[x][j] = a[x][k]; a[x][k] = temp;
}
}
}
}
409 Sắp xếp ptử trên 1 cột tăng dần từ trên xuống dưới
void SapXep(int a[][100], int cot, int dong)
{
int x;
printf("Nhap cot muon sap xep: ");
scanf("%d",&x);
for (int i=0; i<dong-1; i++)
{
for (int j=i+1; j<dong;j++)
{
if (a[i][x]>a[j][x])
{
int temp = a[i][x]; a[i][x] = a[j][x]; a[j][x] = temp;
}
}
}
}
410 Sắp xếp ptử trên 1 cột giảm dần từ trên xuống dưới
void SapXep(int a[][100], int cot, int dong)
{
int x;
printf("Nhap cot muon sap xep: ");
scanf("%d",&x);
for (int i=0; i<dong-1; i++)
{
for (int j=i+1; j<dong;j++)
{
if (a[i][x]<a[j][x])
{
int temp = a[i][x]; a[i][x] = a[j][x]; a[j][x] = temp;
}
}
}
}
411 Xuất giá trị chẵn trong ma trận theo thứ tự giảm dần
412 Xuất các số nguyên tố theo thứ tự tăng dần
413 Sắp xếp theo yêu cầu: Dòng có chỉ số chẵn tăng dần, lẻ giảm dần
void SapXep(int a[][100], int cot, int dong)
{
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot-1; j++)
{
for (int k=j+1; k<cot;k++)
{
if (i%2==0)
{
if (a[i][j]>a[i][k])
{
}
}
else
{
int temp = a[i][j]; a[i][j] = a[i][k]; a[i][k] = temp;
if (a[i][j]<a[i][k])
{
int temp = a[i][j]; a[i][j] = a[i][k]; a[i][k] = temp;
}
}
}
}
}
}
414 Sắp xếp theo yêu cầu: Cột có chỉ số chẵn giảm từ trên xuống, lẻ tăng từ trên xuống
void SapXep(int a[][100], int cot, int dong)
{
for (int i=0; i<cot; i++)
{
for (int j=0; j<dong-1; j++)
{
for (int k=j+1; k<dong;k++)
{
if (i%2==0)
{
if (a[j][i]<a[j][i])
{
}
}
else
{
int temp = a[j][i]; a[j][i] = a[k][i]; a[k][i] = temp;
if (a[j][i]>a[j][i])
{
int temp = a[j][i];
a[j][i] = a[k][i];
a[k][i] = temp;
}
}
}
}
}
}
415 Sắp xếp ptử tăng dần theo hàng và cột: Dùng 2 phương pháp: sử dụng mảng phụ và ko dùng mảng phụ
void GanMaTranVaoMang(int a[][10], int cot,int dong,int b[], int &nb)
{
for (int i=0;i<dong;i++)
{
for (int j=0; j<cot; j++)
{
b[nb] = a[i][j];
nb++;
}
}
}
void SapXepMangPhu(int b[], int nb) //S?p x?p t?ng d?n
{
for (int i=0; i<nb-1; i++)
{
for (int j=i+1; j<nb; j++)
{
if (b[i] > b[j])
{
int temp = b[i];
b[i] = b[j];
b[j] = temp;
}
}
}
}
void GanMangVaoMaTran(int a[][10], int cot,int dong,int b[])
{
int n=0;
for (int i=0;i<dong;i++)
{
for (int j=0; j<cot; j++)
{
a[i][j] = b[n];
n++;
}
}
}
void SapXep(int a[10][10], int cot, int dong)
{
int b[100],nb=0; GanMaTranVaoMang(a,cot,dong,b,nb); SapXepMangPhu(b,nb);
GanMangVaoMaTran(a,cot,dong,b);
}
416 Sắp xếp ptử dương tăng dần theo cột và dòng. Dùng 2 phương pháp: Sử dụng mảng phụ và ko sử dụng mảng
phụ ( như bài 415 t hêm đi ều kiệ n xét ptử dương)
417 Sắp xếp ptử chẵn giảm dần theo cột và dòng. Dùng 2 phương pháp: Sử dụng mảng phụ và ko sử dụng mảng phụ ( như bài 415 t hêm đi ều kiệ n xét ptử chẵn và đổi dấu > thành <)
418 Sắp xếp âm tăng dần, dương giảm dần, 0 giữ nguyên void SapXepSoAm(int a[][10], int cot, int dong)
{
int i,j,k,h,d=0,temp;
for (i=0;i<dong;i++)
{
for (j=0; j<cot; j++)
{
if (a[i][j]<0)
{
for (k=i; k<dong; k++)
{
if (d==0)
h=j;
else
h=0;
for (; h<cot; h++)
{
if (a[i][j] > a[k][h] && a[k][h]<0)
{
temp = a[i][j]; a[i][j] = a[k][h]; a[k][h] = temp;
}
}
}
d=0;
}
if (h==cot)
d=1;
}
}
}
void SapXepSoDuong(int a[][10], int cot, int dong)
{
int i,j,k,h,d=0,temp;
for (i=0;i<dong;i++)
{
for (j=0; j<cot; j++)
{
if (a[i][j]>0)
{
for (k=i; k<dong; k++)
{
if (d==0)
h=j;
else
h=0;
for (; h<cot; h++)
{
if (a[i][j] < a[k][h] && a[k][h]>0)
{
temp = a[i][j]; a[i][j] = a[k][h]; a[k][h] = temp;
}
}
}
d=0;
}
if (h==cot)
d=1;
}
}
}
void SapXep(int a[][10], int cot, int dong)
{
SapXepSoAm(a,cot,dong); SapXepSoDuong(a,cot,dong);
}
419 Sắp xếp chẵn tăng, lẻ giảm ( như bài 418 chỉ sửa lại đi ề u kiện)
420 Sắp xếp các giá trị nằm trên biên ma trận tăng dần
void GanBienVaoMang(int a[][10], int cot, int dong, int b[], int &n)
{
int i=0, j;
for (j=i; j< cot; j++)
{
b[n] = a[i][j];
n++;
}
for (i++,j--; i< dong; i++ )
{
b[n] = a[i][j];
n++;
}
for (i--,j--; j>=0; j--)
{
b[n] = a[i][j];
n++;
}
for (i--,j++; i>0; i--)
{
b[n] = a[i][j];
n++;
}
}
void SapXepMangTangDan(int b[], int n)
{
for (int i=0; i<n-1; i++)
{
for (int j=i+1; j<n;j++)
{
if (b[i]>b[j])
{
int temp=b[i];
b[i] = b[j];
b[j] = temp;
}
}
}
}
void GanMangVaoBien(int a[][10], int cot, int dong, int b[])
{
int i=0,j,n=0;
for (j=i; j< cot; j++)
{
a[i][j] = b[n];
n++;
}
for (i++,j--; i< dong; i++ )
{
a[i][j] = b[n];
n++;
}
for (i--,j--; j>=0; j--)
{
a[i][j] = b[n];
n++;
}
for (i--,j++; i>0; i--)
{
a[i][j] = b[n];
n++;
}
}
void SapXep(int a[][10], int cot, int dong)
{
int b[100], n=0; GanBienVaoMang(a,cot,dong,b,n); SapXepMangTangDan(b,n); GanMangVaoBien(a,cot,dong,b);
}
421 Sắp xếp các giá trị dương nằm trên biên ma trận tăng dần(như bài 420 chỉ thêm điều kiện dương)
422 Sắp xếp các dòng dựa vào: tổng các ptử trong 1 dòng: sắp tăng dần. void TongCacDong(int a[][10],int cot,int dong, int b[])
{
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++)
{
b[i]+=a[i][j];
}
}
}
void HoanVi2Dong(int a[][10],int cot, int d1, int d2)
{
int temp[10];
for (int i=0; i<cot; i++)
{
temp[i] = a[d1][i]; a[d1][i] = a[d2][i]; a[d2][i] = temp[i];
}
}
void SapXep(int a[][10], int cot, int dong)
{
int b[10] = {0}; TongCacDong(a,cot,dong,b); for (int i=0; i<dong-1; i++)
{
for (int j=i+1; j<dong; j++)
{
if (b[i]>b[j])
{
HoanVi2Dong(a,cot,i,j);
int temp = b[i];
b[i] = b[j];
b[j] =temp;
}
}
}
}
423 Sắp xếp giá trị các ptử trong ma trận tăng dần theo dạng xoắn ốc (ma trận xoắ n ốc)
#include <stdio.h>
#include <conio.h>
void NhapCotDong(int &cot,int &dong);
void NhapMangThayMaTran(int Mang[],int cot,int dong); void XuatMangThayMaTran(int Mang[],int cot,int dong); void SapXepMang1Chieu(int Mang[], int cot, int dong);
void ThietLapMaTranXoanOc(int Mang[],int MaTranXoanOc[][10], int cot, int dong);
void XuatMaTran(int a[][10], int cot,int dong);
void main()
{
int Mang[100];
int cot; int dong; NhapCotDong(cot,dong);
NhapMangThayMaTran(Mang,cot,dong); //Nh?p m?ng thay cho ma tr?n printf("
\tMa tran vua nhap vao:
"); XuatMangThayMaTran(Mang,cot,dong); //Xu?t m?ng theo ma tr?n SapXepMang1Chieu(Mang,cot,dong);
//Dò t?ng v? trí trong ma tr?n theo d?ng xo?n ?c int MaTranXoanOc[10][10]; ThietLapMaTranXoanOc(Mang,MaTranXoanOc,cot,dong);
printf("
\tMa tran xoan oc:
");
XuatMaTran(MaTranXoanOc,cot,dong);
getch();
}
void NhapCotDong(int &cot, int &dong)
{
printf("Nhap so cot: "); scanf("%d", &cot);
printf("Nhap so dong: "); scanf("%d", &dong);
}
void NhapMangThayMaTran(int Mang[],int cot,int dong)
{
for (int i=0, stt = 0; i<dong; i++ )
{
for (int j=0; j<cot; j++)
{
printf("\t\t%d/ [%d][%d] = ",stt+1, i, j);
scanf("%d", &Mang[stt]);
stt++;
}
}
}
void XuatMangThayMaTran(int Mang[],int cot,int dong)
{
printf("\t------------------------
");
for (int i=0,stt = 0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", Mang[stt]);
stt++;
}
printf("
");
}
printf("\t------------------------
");
}
void SapXepMang1Chieu(int Mang[], int cot, int dong)
{
for (int i=0;i <(cot*dong)-1; i++)
{
for (int j=i+1; j<(cot*dong); j++)
{
if(Mang[i]>Mang[j])
{
temp = Mang[i]; Mang[i]=Mang[j]; Mang[j]=temp;
}
}
}
}
void ThietLapMaTranXoanOc(int Mang[],int MaTranXoanOc[][10], int cot, int dong)
{
int dem = 0;
int i=0, j=0;
int DauTien=0;
int Tru=0;
do
{
i=DauTien;
for (j=i; j< cot - Tru; j++)
{
}
j--;
MaTranXoanOc[i][j] = Mang[dem];
dem++;
for (i++; i< dong - Tru; i++ )
{
}
i--;
MaTranXoanOc[i][j] = Mang[dem];
dem++;
for (j--; j>=Tru; j--)
{
MaTranXoanOc[i][j] = Mang[dem];
dem++;
}
Tru++;
j++;
for (i--; i>=Tru; i--)
{
MaTranXoanOc[i][j] = Mang[dem];
dem++;
}
DauTien++;
} while (dem!=cot*dong);
}
void XuatMaTran(int a[][10], int cot,int dong)
{
printf("\t------------------------
");
for (int i=0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", a[i][j]);
}
printf("
");
}
printf("\t------------------------
");
}
424 Sắp xếp các ptử theo hình ziczac
#include <stdio.h>
#include <conio.h>
void NhapCotDong(int &cot,int &dong);
void NhapMangThayMaTran(int Mang[],int cot,int dong);
void XuatMangThayMaTran(int Mang[],int cot,int dong);
void SapXepMang1Chieu(int Mang[], int cot, int dong);
void ThietLapMaTranZicZac(int Mang[],int MaTranZicZac[][10], int cot, int dong);
void XuatMaTran(int a[][10], int cot,int dong);
void main()
{
int Mang[100];
int cot; int dong; NhapCotDong(cot,dong);
NhapMangThayMaTran(Mang,cot,dong); printf("
\tMa tran vua nhap vao:
"); XuatMangThayMaTran(Mang,cot,dong); SapXepMang1Chieu(Mang,cot,dong);
int MaTranZicZac[10][10]; ThietLapMaTranZicZac(Mang,MaTranZicZac,cot,dong); printf("
\tMa tran Zic Zac:
"); XuatMaTran(MaTranZicZac,cot,dong);
getch();
}
void NhapCotDong(int &cot, int &dong)
{
printf("Nhap so cot: "); scanf("%d", &cot);
printf("Nhap so dong: "); scanf("%d", &dong);
}
void NhapMangThayMaTran(int Mang[],int cot,int dong)
{
for (int i=0, stt = 0; i<dong; i++ )
{
for (int j=0; j<cot; j++)
{
printf("\t\t%d/ [%d][%d] = ",stt+1, i, j);
scanf("%d", &Mang[stt]);
stt++;
}
}
}
void XuatMangThayMaTran(int Mang[],int cot,int dong)
{
printf("\t------------------------
");
for (int i=0,stt = 0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", Mang[stt]);
stt++;
}
printf("
");
}
printf("\t------------------------
");
}
void SapXepMang1Chieu(int Mang[], int cot, int dong)
{
for (int i=0;i <(cot*dong)-1; i++)
{
for (int j=i+1; j<(cot*dong); j++)
{
if(Mang[i]>Mang[j])
{
temp = Mang[i]; Mang[i]=Mang[j]; Mang[j]=temp;
}
}
}
}
void ThietLapMaTranZicZac(int Mang[],int MaTranZicZac[][10], int cot, int dong)
{
int dem = 0; int i=0, j=0; do
{
for (i; i<dong ; i++)
{
}
j++;
i--;
MaTranZicZac[i][j] = Mang[dem]; dem++;
if (dem == cot*dong)
{
return;
}
for (i; i>-1; i--)
{
}
i++;
j++;
MaTranZicZac[i][j] = Mang[dem]; dem++;
} while (dem != cot*dong);
}
void XuatMaTran(int a[][10], int cot,int dong)
{
printf("\t------------------------
");
for (int i=0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", a[i][j]);
}
printf("
");
}
printf("\t------------------------
");
}
425 Xuất các giá trị âm giảm dần (ma trận ko thay đổi sau khi xuất)
Xây dựng ma trận
426 Cho ma trận A.Hãy tạo ma trận B,B[i][j] = abs(A[i][j])
void XayDungB(int a[][10], int n, int m, int b[][10])
{
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
b[i][j] = abs(a[i][j]);
}
}
}
427 Cho ma trận A.Hãy tạo ma trận B,B[i][j] = lớn nhất dòng i,cột j của A
int MaxTaiITaiJ(int a[][10], int n, int m,int i, int j)
{
int LonNhat = a[i][0];
for (int k = 1; k<m; k++)
LonNhat = (LonNhat < a[i][k])?a[i][k]:LonNhat;
for (k = 0; k<n; k++)
LonNhat = (LonNhat < a[k][j])?a[k][j]:LonNhat;
return LonNhat;
}
void XayDungB(int a[][10], int n, int m, int b[][10])
{
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
b[i][j] = MaxTaiITaiJ(a,n,m,i,j);
}
}
}
428 Cho ma trận A.Hãy tạo ma trận B,B[i][j] = số lượng ptử dương xung quanh A[i][j]
void XayDungB(int a[][10], int cot, int dong, int b[][10])
{
int dx[8]={-1,-1,-1, 0, 0, 1, 1, 1}; int dy[8]={-1, 0, 1,-1, 1,-1, 0, 1}; for (int i=0; i<dong; i++)
{
for (int j=0; j< cot; j++)
{
for (int k=0; k<8; k++)
{
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot))
{
if (a[dx[k]+i][dy[k]+j]>0)
{
b[i][j]++;
}
}
}
}
}
}
Chuyên đề Ma trận vuông
429 Hàm nhập ma trận vuông số nguyên
430 Hàm nhập ma trận vuông số thực
431 Hàm xuất ma trận vuông số nguyên
432 Hàm xuất ma trận vuông số thực
437 Hàm sắp xếp ma trận vuông tăng từ trên xuống dưới và từ trái sang phải
void SapXep(int a[][10], int n)
{
for (int k=0; k<=n*n-2; k++)
for (int l=k+1; l<=n*n-1; l++)
if (a[k/n][k%n] > a[l/n][l%n])
{
int temp = a[k/n][k%n]; a[k/n][k%n] = a[l/n][l%n]; a[l/n][l%n] = temp;
}
}
[b]Tính toán
438 Tổng ptử thuộc ma trận tam giác trên (ko tính đường chéo) trong ma trận vuông
439 Tổng ptử thuộc ma trận tam giác dưới (ko tính đường chéo) trong ma trận vuông
440 Tổng ptử trên đường chéo chính
int TongDuongCheoChinh(int a[][10], int n)
{
int S = 0;
for (int i=0; i<n;i++) S+=a[i][i]
return S;
}
441 Tổng ptử trên đường chéo phụ
int TongDuongCheoPhu(int a[][10], int n)
{
int S = 0;
for (int i=0; i<n;i++) S+=a[i][n-1-i]
return S;
}
442 Tổng ptử chẵn nằm trên biên
int TongPTuChanTrenBienMaTranVuong(int a[][100], int n)
{
int s=0;
for (int i=0; i<n;i++)
{
if (a[0][i] %2 == 0) //Dòng ??u 0
s+=a[0][i];
if (a[n-1][i] %2 == 0) //Dòng cu?i n-1
s+=a[n-1][i];
if (a[i][0] %2 == 0) //C?t ??u 0
s+=a[i][0];
if (a[i][n-1] %2 == 0) //C?t cu?i n-1
s+=a[i][n-1];
}
return s;
}
Kĩ thuật đặt lính canh
443 Tìm max trong ma trận tam giác trên
444 Tìm min trong ma trận tam giác dưới
445 Tìm max trên đường chéo chính
446 Tìm max trên đường chéo phụ
447 Tìm max nguyên tố trong ma trận
int SoNguyenTo(int n)
{
if (n<=1)
{
return 0;
}
for (int i=2; i<n-1; i++)
{
if (n/i==0)
{
return 0;
}
}
return 1;
}
int SoNguyenToDauTien(int a[][10], int n)
{
for (int i=0; i<n;i++)
{
for (int j=0; j<n; j++)
{
if (SoNguyenTo(a[i][j])==1 )
{
return a[i][j];
}
}
}
return 0;
}
int SoNguyenToMax(int a[][10], int n)
{
int SoNguyenToLonNhat = SoNguyenToDauTien(a,n);
if (SoNguyenToLonNhat == 0)
{
return 0; //ko co so nguyen to
}
for (int i=0; i<n;i++)
{
for (int j=0; j<n; j++)
{
if (SoNguyenTo(a[i][j])==1)
{
SoNguyenToLonNhat=(SoNguyenToLonNhat>a[i][j])?SoNguyenToLonNhat:a[i][j];
}
}
}
return SoNguyenToLonNhat;
}
448 Tìm 2 giá trị gần nhau nhất
void HaiGiaTriGanNhat(int a[][10], int n, int &X1, int &X2)
{
int KhoangCach = abs(a[0][0] - a[0][1]); X1 = a[0][0]; //X1 va X2 la bien can tim X2 = a[0][1];
int j;
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (i == n-1 && j == n-1)
{
break;
}
for (int k=i; k<n;k++)
{
for (int h=0; h<n; h++ )
{
if (k==i && h<=j)
{
continue;
}
if (KhoangCach > abs(a[i][j] - a[k][h]))
{
KhoangCach = abs(a[i][j] - a[k][h]); X1 = a[i][j];
X2 = a[k][h];
}
}
}
}
}
}
449 * Cho ma trận vuông A(n x n). Hãy tìm ma trận vuông B(k x k) sao cho tổng các giá trị trên ma trận vuông này
là lớn nhất
Kĩ thuật đếm
450 Đếm số lượng cặp giá trị đối xứng nhau wa đường chéo chính
int DemCapGiaTriDoiXung(int a[][10], int n)
{
int dem = 0;
for (int i=1; i<n;i++)
for (int j=0; j<i; j++)
if (a[i][j]==a[j][i])
dem++;
return dem;
}
451 ??m s? l??ng dòng gi?m
int KtraDongGiam(int a[], int n)
{
for (int i=0; i<n-1; i++)
{
if (a[i]<a[i+1])
{
return 0;
}
}
return 1;
}
int DemSoLuong(int a[][10], int n)
{
int dem = 0;
for (int i=0; i<n;i++)
{
if (KtraDongGiam(a[i],n)==1)
{
dem++;
}
}
return dem;
}
452 Đếm ptử cực đại
int SoLuongPTuCucDai(int a[][10], int n)
{
int dem=0;
int di[8] = {-1,-1,-1,0,0,1,1,1}; int dj[8] = {-1,0,1,-1,1,-1,0,1}; for (int i=0; i<n;i++)
{
for (int j=0; j<n; j++)
{
int flag =1;
for (int k=0; k<8; k++)
{
if (i+di[k]>=0 && i+di[k]<=n-1 && j+dj[k]>=0 && j+dj[k]<=n-1)
{
if (a[i+di[k]][j+dj[k]]>a[i][j])
{
flag = 0;
break;
}
}
}
if (flag == 1)
{
dem++;
}
}
}
return dem;
}
453 Đếm giá trị dương trên đường chéo chính
int SoLuongDuongCheoChinh(int a[][10], int n)
{
int dem=0;
for (int i=0; i<n;i++)
{
if (a[i][i]>0)
{
dem++;
}
}
return dem;
}
454 Đếm số âm trên đường chéo phụ
int SoLuongAm(int a[][10], int n)
{
int dem = 0;
for (int i=0; i<n;i++)
if (a[i][n-1-i]<0)
dem++;
return dem;
}
455 Đếm số chẵn trong ma trận tam giác trên
Kĩ thuật đặt cờ hiệu
456 Ktra đường chéo chính có tăng dần hay ko?
457 Ktra ma trận có đối xứng wa chéo chính ko?
458 ktra ma trận có đối xứng wa chéo phụ ko?
459 Ktra ma trận có phải là ma phương ko? Ma phương là khi tổng ptử trên các dòng, cột và 2 chéo chính phụ bằng
nhau
Sắp xếp
460 Sắp chéo chính tăng dần
461 Sắp chéo phụ giảm dần
462 Hoán vị 2 dòng
463 Hoán vị 2 cột
464 sắp các dòng tăng dần theo tổng dòng
465 Đưa chẵn về đầu ma trận vuông
466 * Ma trận vuông A(n x n) với n >=3. Sắp tam giác trên tăng dần từ trên xuống dưới và từ trái sang phải
467 * Ma trận vuông A với n>=3. Sắp tam giác dưới giảm dần từ trên xuống dưới và từ trái sang phải
468 * Xây dựng ma phương A
Các phép toán trên ma trận
469 Tổng 2 ma trận
void Tong2MaTran(int a[][], int b[][], int c[][], int n, int m)
{
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
c[i][j] = a[i][j] + b[i][j];
}
}
}
470 Hiệu 2 ma trận
void Hieu2MaTran(int a[][], int b[][], int c[][], int n, int m)
{
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
c[i][j] = a[i][j] - b[i][j];
}
}
}
471 Tích 2 ma trận
// mb = na; //dòng b = cột a
// nb = ma; //cột b = dòng a
// nc = na;
// mc = mb;
int GiaTriTungVTri(int a[][], int b[][], int m,int i, int j)
{
int T = 0;
for (int k=0 ; k<m; k++)
T += a[i][k]*b[k][j];
return T;
}
void Tich2MaTran(int a[][], int b[][], int c[][], int n, int m)
{
c = new int* [n];
for (int i=0; i<n; i++)
{
c[i] = new int [n];
for (int j=0; j<n; j++)
{
c[i][j] = GiaTriTungVTri(a,b,m,i,j);
}
}
}
472 * Ma trận nghịch đảo
473 * Định thức của ma trận
474 * Tạo ma phương bậc
-------------Hết----------------
Bạn đang đọc truyện trên: Truyen247.Pro