MA TRẬN Hàm nhập & xuất ma trận các số nguyên void nhap(int a[][100],int &m,int &n) { printf("Nhap m:"); scanf("%d",&m); printf("Nhap n:"); scanf("%d",&n); for(int i=0;i<m;i++) for(int j=0;j<n;j++) { printf("Nhap a[%d][%d]:",i,j); scanf("%d",&a[i],[j]); } } void xuat(int a[][100],int m,int n) { for(int i=0;i<m;i++) { for(int j=0;j<n;j++) printf("%4d",a[i][j]); printf("\n"); } }
Hàm nhập & xuất ma trận các số thực void nhap(float a[][100],int &m,int &n) { printf("Nhap m :"); scanf("%d",&m); printf("Nhap n :"); scanf("%d",&n); for(int i=0;i<m;i++) for(int j=0;j<n;j++) { printf("Nhap a[%d][%d]:",i,j); scanf("%f",&a[i],[j]); } } void xuat(float a[][100],int m,int n) { for(int i=0;i<m;i++) { for(int j=0;j<n;j++) printf("%8.3f",a[i][j]); printf("\n "); } }
Hàm nhập & xuất ma trận các số nguyên dài
void nhap(long a[][100],int &m,int &n) { printf("Nhap m :"); scanf("%d",&m); printf("Nhap n:"); scanf("%d",&n); for(int i=0;i<m;i++) for(int j=0;j<n;j++) { printf("Nhap a[%d][%d]",i,j); scanf("%ld",&a[i][j]); } } void xuat(long a[][100],int m,int n) { for(int i=0;i<m;i++) { for(int j=0;j<n;j++) printf("%ld",a[i][j]); printf("\n "); } }
Hàm nhập & xuất ma trận các số thực dài void nhap(double a[][100],int &m,int &n); { printf("Nhap m :"); scanf("%d",&m); prinf("Nhap n :"); scanf("%d",&n); for(int i=0;i<m;i++) for(int j=0;j<n;j++) { printf("Nhap a[%d][%d]",i,j); scanf("%lf",&a[i][j]); } } void xuat(double a[][100],int m,int n) { for(int i=0;i<m;i++) { for(int j=0;j<n;j++) printf("%lf",a[i][j]); printf("\n "); } }
Chuyên đề về ma trận thường Kĩ thuật tính toán 320 Tổng các số dương trong ma trận thực int TongSoDuong(int a[][100], int n, int m)
{
int s=0;
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
if (a[i][j]>0)
s+=a[i][j];
return s;
}
321 Tích các số lẻ trong ma trận nguyên int TichGiaTriLe(int a[][100], int n, int m)
{
int t=1;
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
if (a[i][j]%2!=0)
t*=a[i][j];
return t;
}
322 Tổng giá trị trên 1 dòng ma trận thực int TongDongX(float *a, int m) //chuy?n a[x] , x là dòng mà b?n c?n tính t?ng
{
int S=0;
for (int i=0; i<m; i++)
S+=a[i];
return S;
} 323 Tích giá trị dương trên 1 cột ma trận thực float TichDuongCotY(float a[][100], int n, int m, int y) //y là s? c?t c?n tính
{
float T=1;
for (int i=0; i<n; i++)
if (a[i][y]>0)
T*=a[i][y];
return T;
} 324 Tổng giá trị dương trên 1 dòng ma trận thực int TongDuongDongX(float *a, int m)
//chuy?n a[x] , x là dòng mà b?n c?n tính t?ng
{
int S=0;
for (int i=0; i<m; i++)
{
if (a[i]>0)
S+=a[i];
}
return S;
} 325 Tích các chẵn trên 1 cột ma trận nguyên int TichChanCotY(int a[][100], int n, int m, int y) //y là s? c?t c?n tính
{
int T=1;
for (int i=0; i<n; i++)
if (a[i][y]%2 = =0)
T*=a[i][y];
return T;
} 326 Trung bình cộng các số dương ma trận thực float TBCongDuong(float a[][100], int n, int m)
{
int S=0;
int dem =0 ;
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
if (a[i][j]>0)
{
S+=a[i][j];
dem++;
}
}
}
return (float)(S/dem);
} 327 Tổng các giá trị nằm trên biên của ma trận int TongBien(int a[][100], int n, int m)
{
int S=0;
for (int i=0; i<m; i++)
{
S = S+ a[0][i] + a[n-1][i];
}
for (i=1; i<n-1; i++)
{
S = S+ a[i][0] + a[i][m-1];
}
return S;
} 328 Trung bình nhân các số dương ma trận thực float TBNhanDuong(float **a, int n, int m)
{
float T=1;
int dem =0 ;
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
if (a[i][j]>0)
{
T*=a[i][j];
dem++;
}
}
}
return pow(T,1.0/dem);
}
329 Biến đổi ma trận bằng cách thay các giá trị âm bằng giá trị tuyệt đối của nó void BienDoiMaTran(int a[][100], int n, int m)
{
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
a[i][j] = abs(a[i][j]);
} 330 Biến đổi ma trận thực bằng cách thay các giá trị bằng giá trị nguyên gần nó nhất float XuLy(float n)
{
float PhanNguyen = (int)(n);
float PhanLe = n - PhanNguyen;
if (PhanLe < 0,5)
{
return PhanNguyen;
}
return PhanNguyen+1;
}
void BienDoiMaTran(float a[][100], int dong, int cot)
{
for (int i=0;i<dong; i++)
{
for (int j=0; j<cot; j++)
{
a[i][j] = XuLy(a[i][j]);
}
}
}
331 Tổng các giá trị trên 1 dòng ma trận thực float TongDongX(int a[], int m) //chuy?n a[x] , x là dòng mà b?n c?n tính t?ng
{
float S=0;
for (int i=0; i<m; i++)
S+=a[i];
return S;
} 332 Tổng giá trị lẻ trên 1 cột ma trận nguyên int TongLeCotY(int a[][100], int n, int m, int y) //y là s? c?t c?n tính
{
int S=0;
for (int i=0; i<n; i++)
if (a[i][y]%2 ! =0)
S+=a[i][y];
return S;
} 333 Tổng các số hoàn thiện trong ma trân số nguyên 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 TongSoHoanThien(int a[][100],int n, int m)
{
int S=0;
for (int i=0;i<dong; i++)
for (int j=0; j<cot; j++)
if (SoHoanThien(a[i][j])==1)
S+=a[i][j];
return S;
} Kĩ thuật đếm 334 Viết hàm đếm số lượng số dương trong ma trận thực int DemDuong(float a[][100], int dong, int cot)
{
int dem=0;
for (int i=0;i<dong; i++)
for (int j=0; j<cot; j++)
if (a[i][j]>0)
dem++;
return dem;
}
335 Đếm số lượng số ng tố trong ma trận nguyên int SoNguyenTo(int n)
{
if (n<=1)
return 0;
for (int i=2; i<n; i++)
if (n%i==0)
return 0;
return 1;
}
int DemSoNguyenTo(int a[][100], int dong, int cot)
{
int dem=0;
for (int i=0;i<dong; i++)
for (int j=0; j<cot; j++)
if (SoNguyenTo(a[i][j])==1)
dem++;
return dem;
}
336 Đếm tần suất xuất hiện của 1 giá trị x trong ma trận thực int DemGiaTriX(float a[][100], int dong, int cot, float x)
{
int dem=0;
for (int i=0;i<dong; i++)
for (int j=0; j<cot; j++)
if (a[i][j]==x)
dem++;
return dem;
}
337 Đếm số chữ số trong ma trận số nguyên dương int DemTungSo(int n)
{
int dem = 1;
n = abs(n);
while (n>=10)
{
n= n/10;
dem++;
}
return dem;
}
int Dem(int a[][100], int dong, int cot)
{
int dem = 0;
for (int i=0;i<dong; i++)
{
for (int j=0; j<cot; j++)
{
dem += DemTungSo(a[i][j]);
}
}
return dem;
}
338 Đếm số lượng số dương trên 1 hàng ma trận thực int DemDuong(float a[][100], int cot, int HangCanTinh)
{
int dem=0;
for (int j=0; j<cot; j++)
if (a[HangCanTinh][j]>0)
dem++;
return dem;
}339 Đếm số lượng số hoàn thiện trên 1 hàng ma trận nguyên int SoHoanThien(int n)
{
if (n<=0)
return 0;
int s=0;
for (int i=1;i<n;i++)
if (n%i==0)
s+=i;
if (s==n)
return 1;
return 0;
}
int DemSoHoanThien(int a[][100], int cot, int HangCanTinh)
{
int dem=0;
for (int j=0; j<cot; j++)
if (SoHoanThien(a[HangCanTinh][j])==1)
dem++;
return dem;
}
340 Đếm số lượng âm trên 1 cột ma trận thực int DemSoDuong(float a[][100], int dong, int CotCanTinh)
{
int dem=0;
for (int i=0; i<dong; i++)
if (a[i][CotCanTinh]<0)
dem++;
return dem;
}
341 Đếm số lượng dương trên biên của ma trận thực int DemSoDuong(float a[][100], int dong, int Cot)
{
int dem=0;
for (int j=0; j<Cot; j++)
{
if (a[0][j]>0)
dem++;
if (a[dong-1][j]>0)
dem++;
}
for (int i=1; i<dong-1; i++)
{
if (a[i][0]>0)
dem++;
if (a[i][Cot-1]>0)
dem++;
}
return dem;
}
342 Đếm số lượng ptử cực đại ma trận thực. 1 ptử cực đại là khi nó lớn hơn các ptử xung quanh int CucDai(float a[][100],int dong,int cot, int i, int j)
{
int dx[8]={-1,-1,-1, 0, 0, 1, 1, 1};
int dy[8]={-1, 0, 1,-1, 1,-1, 0, 1};
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[i][j]<a[dx[k]+i][dy[k]+j])
{
return 0;
}
}
}
return 1;
}
int DemCucDai(float a[][100], int dong, int cot)
{
int dem=0;
for (int i=0;i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (CucDai(a,dong,cot,i,j)==1)
{
printf("\na[%d][%d] = %d",i,j,a[i][j]);
dem++;
}
}
}
return dem;
} 343 Đếm số lượng ptử cực trị ma trận thực.1 ptử cực trị khi nó lớn hơn hoặc nhỏ hơn ptử xung quanh int CucTri(float a[][100],int dong,int cot, int i, int j)
{
int dx[8]={-1,-1,-1, 0, 0, 1, 1, 1};
int dy[8]={-1, 0, 1,-1, 1,-1, 0, 1};
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[i][j]<a[dx[k]+i][dy[k]+j])
{
for (k=k+1; k<8; k++)
{
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot))
{
if (a[i][j]>a[dx[k]+i][dy[k]+j])
{
return 0;
}
}
}
}
else
{
for (k=k+1; k<8; k++)
{
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot))
{
if (a[i][j]<a[dx[k]+i][dy[k]+j])
{
return 0;
}
}
}
}
}
}
return 1;
}
int DemCucTri(float a[][100], int dong, int cot)
{
int dem=0;
for (int i=0;i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (CucTri(a,dong,cot,i,j)==1)
{
dem++;
}
}
}
return dem;
}
344 Đếm số lượng giá trị có trong ma trận thực. Lưu ý: nếu có k ptử (k>=1) trong ma trận bằng nhau thì ta chỉ tính là 1 int Xet(float a[][100], int dong,int cot, int i, int j)
{
int k, h; //k: dong, h: cot
for (h=j+1; h<cot; h++)
{
if (a[i][h] == a[i][j])
{
return 0;
}
}
for (k=i+1; k<dong; k++)
{
for (h=0; h<cot; h++)
{
if (a[k][h] == a[i][j])
{
return 0;
}
}
}
return 1;
}
int DemPtu(float a[][100],int dong,int cot)
{
int dem=0;
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (Xet(a,dong,cot,i,j)==1)
{
dem++;
}
}
}
return dem;
}
345 Tính tổng các ptử cực trị trong ma trận thực int CucTri(float a[][100],int dong,int cot, int i, int j)
{
int dx[8]={-1,-1,-1, 0, 0, 1, 1, 1};
int dy[8]={-1, 0, 1,-1, 1,-1, 0, 1};
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[i][j]<a[dx[k]+i][dy[k]+j])
{
for (k=k+1; k<8; k++)
{
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot))
{
if (a[i][j]>a[dx[k]+i][dy[k]+j])
{
return 0;
}
}
}
}
else
{
for (k=k+1; k<8; k++)
{
if ((0<=dx[k]+i && dx[k]+i<dong) && (0<=dy[k]+j && dy[k]+j < cot))
{
if (a[i][j]<a[dx[k]+i][dy[k]+j])
{
return 0;
}
}
}
}
}
}
return 1;
}
int TongCucTri(float a[][100], int dong, int cot)
{
int S=0;
for (int i=0;i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (CucTri(a,dong,cot,i,j)==1)
{
S+=a[i][j];
}
}
}
return S;
}
346 Đếm số lượng giá trị “hoàng hậu” trên ma trận. 1 ptử hoàng hậu khi nó lớn nhất trên dòng, cột và 2 đường chéo int XetDuongCheo(int a[][100],int dong,int cot, int i, int j)
{
int k,h; //k : dong, h : cot
for (k=i,h=j; k>=0 && h<cot; k--, h++)
{
if (a[k][h] > a[i][j])
{
return 0;
}
}
for (k=i+1, h=j-1; k<dong && h>=0; k++, h--)
{
if (a[k][h] > a[i][j])
{
return 0;
}
}
for (k=i-1, h =j-1; k>=0 && h>=0; k--,h--)
{
if (a[k][h] > a[i][j])
{
return 0;
}
}
for (k=i+1, h=j+1; k<dong && h<cot; k++, h++)
{
if (a[k][h] > a[i][j])
{
return 0;
}
}
return 1;
}
int XetCotDong(int a[][100],int dong,int cot, int i, int j)
{
for (int k=0; k<dong; k++ )
{
if (a[k][j]>a[i][j])
{
return 0;
}
}
for (k=0; k<cot; k++ )
{
if (a[i][k]>a[i][j])
{
return 0;
}
}
return 1;
}
int XetTongQuat(int a[][100],int dong,int cot, int i, int j)
{
if (XetCotDong(a,dong,cot,i,j)==1)
if (XetDuongCheo(a,dong,cot,i,j)==1)
return 1;
else
return 0;
return 0;
}
int DemHoangHau(int a[][100], int dong,int cot)
{
int dem=0;
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (XetTongQuat(a,dong,cot,i,j) == 1) //la hoang hau
{
dem ++;
}
}
}
return dem;
}
347 Đếm số lượng “yên ngựa”.1 ptử yên ngựa khi nó lớn nhất trên dòng, nhỏ nhất trên cột int XetCotDong(int a[][100],int dong,int cot, int i, int j)
{
for (int k=0; k<dong; k++ )
{
if (a[k][j]<a[i][j])
{
return 0;
}
}
for (k=0; k<cot; k++ )
{
if (a[i][k]>a[i][j])
{
return 0;
}
}
return 1;
}
int DemYenNgua(int a[][100], int dong,int cot)
{
int dem=0;
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (XetCotDong(a,dong,cot,i,j) == 1)
{
dem ++;
}
}
}
return dem;
}
Kĩ thuật Đặt Cờ Hiệu 348 Ktra ma trận có số dương ko int Ktra(int a[][100],int dong,int cot)
{
int flag = 0;
for (int i=0; i<dong; i++)
{
for (int j=0;j<cot;j++)
{
if (a[i][j]>0)
{
flag=1;
break;
}
}
}
return flag;
}
349 Ktra ma trận có số hoàn thiện ko 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 Ktra(int a[][100],int dong,int cot)
{
int flag = 0;
for (int i=0; i<dong; i++)
{
for (int j=0;j<cot;j++)
{
if (sohoanthien(a[i][j])==1)
{
flag=1;
break;
}
}
}
return flag;
}
350 Ktra ma trận có số lẻ ko int Ktra(int a[][100],int dong,int cot)
{
int flag = 0;
for (int i=0; i<dong; i++)
{
for (int j=0;j<cot;j++)
{
if (a[i][j]%2!=0)
{
flag=1;
break;
}
}
}
return flag;
}
351 Ktra ma trận có toàn dương ko int Ktra(int a[][100],int dong,int cot)
{
int flag = 1;
for (int i=0; i<dong; i++)
{
for (int j=0;j<cot;j++)
{
if (a[i][j]<0)
{
flag=0;
break;
}
}
}
return flag;
}
352 Ktra 1 hàng ma trận có tăng dần hay ko int Ktra(int a[][100],int dong,int cot, int DongCanTinh)
{
int flag = 1; //coi nh? dòng t?ng
for (int j=0;j<cot-1;j++)
{
if (a[DongCanTinh][j]>a[DongCanTinh][j+1])
{
flag=0; //dòng ko t?ng
break;
}
}
return flag;
} 353 Ktra 1 cột ma trận có giảm dần ko int Ktra(int a[][100],int dong,int cot, int CotXet)
{
int flag = 1;
for (int i=0;i<dong-1;i++)
{
if (a[i][CotXet]<a[i+1][CotXet])
{
flag=0;
break;
}
}
return flag;
} 354 Ktra các gtrị trong ma trận có giảm dần theo cột và dòng hay ko int Ktra(int a[][100],int dong,int cot)
{
int flag =1;
int i,j;
//Ktra dong truoc
for (i=0;i<dong;i++)
{
for (j=0; j<cot-1;j++)
{
if (a[i][j]<a[i][j+1])
{
flag=0;
break;
}
}
}
//Ktra cot sau
for (j=0; j<cot;j++)
{
for (i=0; i<dong-1;i++)
{
if (a[j][i]<a[j][i+1])
{
flag=0;
break;
}
}
}
return flag;
}
355 Liệt kê các dòng toàn âm trong ma trận các số thực void LietKe(float a[][100],int dong,int cot)
{
int i,j,flag;
//Ktra dong truoc
for (i=0;i<dong;i++)
{
for (flag =1,j=0; j<cot;j++)
{
if (a[i][j]>0)
{
flag=0;
break;
}
}
if (flag == 1)
{
printf("\nDong a[%d] toan am : ",i);
for (j=0;j<cot;j++)
{
printf(" %.2f ",a[i][j]);
}
}
}
}
356 Liệt kê chỉ số các dòng chứa toàn giá trị chẵn void LietKe(int a[][100],int dong,int cot)
{
int i,j,flag;
//Ktra dong truoc
for (i=0;i<dong;i++)
{
for (flag =1,j=0; j<cot;j++)
{
if (a[i][j]%2!=0)
{
flag=0;
break;
}
}
if (flag == 1)
{
printf("\nDong a[%d] toan chan ",i);
}
}
}
357 Liệt kê dòng chứa số nguyên tố void LietKe(int a[][100],int dong,int cot)
{
int i,j,flag;
for (i=0;i<dong;i++)
{
for (flag =0,j=0; j<cot;j++)
{
if (SoNguyenTo(a[i][j])==1)
{
flag=1;
break;
}
}
if (flag == 1)
{
printf("\nDong a[%d] co chua so nguyen to ",i);
}
}
}
358 liệt kê các dòng có chứa giá trị chẵn void LietKe(int a[][100],int dong,int cot)
{
int i,j,flag;
for (i=0;i<dong;i++)
{
for (flag =0,j=0; j<cot;j++)
{
if (a[i][j]%2==0)
{
flag=1;
break;
}
}
if (flag == 1)
{
printf("\nDong a[%d] co chua chan ",i);
}
}
}
359 Liệt kê các dòng có chứa giá trị âm void LietKe(int a[][100],int dong,int cot)
{
int i,j,flag;
for (i=0;i<dong;i++)
{
for (flag =0,j=0; j<cot;j++)
{
if (a[i][j] <0)
{
flag=1;
break;
}
}
if (flag == 1)
{
printf("\nDong a[%d] co chua gia tri am ",i);
}
}
}
360 Liệt kê các cột chứa số chính phương void LietKe(int a[][100],int dong,int cot)
{
int i,j,flag;
for (j=0;j<cot;j++)
{
for (flag =0,i=0; i<dong;i++)
{
if (sochinhphuong(a[i][j])==1)
{
flag=1;
break;
}
}
if (flag == 1)
{
printf("\nCot a[%d] co chua so chinh phuong ",j);
}
}
}
361 Liệt kê các dòng thỏa: có giá trị âm, dương và 0 (ptử trung hòa) void LietKe(int a[][100],int dong,int cot)
{
int i,j;
for (i=0;i<dong;i++)
{
if (n>2)
{
int flag[3] = {0};
for (j=0; j<cot;j++)
{
if (a[i][j]<0)
{
flag[0] = 1;
}
else if (a[i][j]==0)
{
flag[1] = 1;
}
else if (a[i][j]>0)
{
flag[2] = 1;
}
if (flag[0]+flag[1]+flag[2]==3)
{
printf("\nDong a[%d] co ptu am, duong, 0",i);
break;
}
}
}
}
}
362 Liệt kê các dòng giảm dần void LietKe(int a[][100],int dong,int cot)
{
int i,j,flag;
for (i=0;i<dong;i++)
{
for (flag =1,j=0; j<cot-1;j++)
{
if (a[i][j]<a[i][j+1])
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("\nDong a[%d] giam",i);
}
}
}
363 Liệt kê các cột tăng dần void LietKe(int a[][100],int dong,int cot)
{
int i,j,flag;
for (j=0;j<cot;j++)
{
for (flag =1,i=0; i<dong-1;i++)
{
if (a[i][j]>a[i+1][j])
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("\nCot a[%d] tang",j);
}
}
} 364 Cho 2 ma trận A,B. Ktra ma trận A có là ma trận con của B ko? int KiemTra(int a[][100], int donga, int cota, int b[][100], int dongb, int cotb)
{
int i,j,k,h,flag=0,s,t;
for (i=0; i<donga; i++)
{
for (j=0;j<cota;j++)
{
if (donga-i>=dongb && cota-j>=cotb && a[i][j]==b[0][0])
{
for (flag=1,s=i,k=0;k<dongb;k++,s++)
{
for (h=0,t=j;h<cotb;h++,t++)
{
if (b[k][h]!=a[s][t])
{
flag =0;
break;
}
}
if (flag == 0)
break;
else
return 1;
}
}
}
}
return 0;
}
365 Đếm số lần xuất hiện của ma trận A trong ma trận B? int Dem(int a[][100], int donga, int cota, int b[][100], int dongb, int cotb)
{
int i,j,k,h,flag=1,s,t,dem=0;
for (i=0; i<donga; i++)
{
for (j=0;j<cota;j++)
{
if (donga-i>=dongb && cota-j>=cotb && a[i][j]==b[0][0])
{
for (s=i,k=0;k<dongb;k++,s++)
{
for (h=0,t=j;h<cotb;h++,t++)
{
if (b[k][h]!=a[s][t])
{
flag =0;
break;
}
}
if (flag == 0)
break;
}
if (flag == 1)
{
dem++;
}
}
}
}
return dem;
} Kĩ thuật đặt lính canh 366 Tìm số chẵn đầu tiên trong ma trận int GiaTriCanTim(int a[][100], int cot, int dong)
{
for (int i=0; i<dong; i++)
{
for(int j=0; j<cot; j++)
{
if (a[i][j]%2==0)
{
return a[i][j];
}
}
}
return -1;
}
367 Tìm max trong ma trận
int GiaTriCanTim(int a[][100], int cot, int dong)
{
int Max = a[0][0];
for (int i=0; i<dong; i++)
{
for(int j=0; j<cot; j++)
{
Max = (Max>a[i][j])?Max:a[i][j];
}
}
return Max;
}
368 Tìm giá trị lớn thứ 2 trong ma trận (max2) int GiaTriCanTim(int a[][100], int cot, int dong)
{
int Max=a[0][0];
for (int i=0; i<dong; i++)
{
for(int j=0; j<cot; j++)
{
Max = (Max>a[i][j])?Max:a[i][j];
}
}
int Max2 = a[0][0];
for (i=0; i<dong; i++)
{
for(int j=0; j<cot; j++)
{
if (Max>Max2 && a[i][j]!=Max && Max2<a[i][j])
{
Max2 = a[i][j];
}
}
}
return Max2;
}
369 Tìm số dương đầu tiên trong ma trận int GiaTriCanTim(int a[][100], int cot, int dong)
{
for (int i=0; i<dong; i++)
{
for(int j=0; j<cot; j++)
{
if (a[i][j]>0)
{
return a[i][j];
}
}
}
return -1;
}
370 Tìm giá trị âm lớn nhất trong ma trận int AmDauTien(int a[][100], int cot, int dong)
{
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (a[i][j]<0)
{
return a[i][j];
}
}
}
return 0;
}
int GiaTriCanTim(int a[][100], int cot, int dong)
{
int AmMax = AmDauTien(a,cot,dong);
if (AmMax == 0)
{
return 0;
}
for (int i=0; i<dong;i++)
{
for (int j=0; j<cot; j++)
{
if (a[i][j]<0)
{
AmMax = (AmMax>a[i][j])?AmMax:a[i][j];
}
}
}
return AmMax;
}
371 Liệt kê các dòng có chứa max int GiaTriMax(int a[][100], int cot, int dong)
{
int Max = a[0][0];
for (int i=0; i<dong; i++)
{
for(int j=0; j<cot; j++)
{
Max = (Max>a[i][j])?Max:a[i][j];
}
}
return Max;
}
void LietKe(int a[][100], int cot, int dong)
{
int Max = GiaTriMax(a,cot,dong);
for (int i=0; i<dong;i++)
{
for (int j=0; j<cot; j++)
{
if (a[i][j]==Max)
{
printf("\nDong [%d] chua max: ", i);
for (j=0; j<cot; j++)
{
printf("%4d", a[i][j]);
}
}
}
}
}
372 Tìm giá trị lớn nhất trên 1 dòng void LietKe(int a[][100], int cot, int dong)
{
for (int i=0; i<dong;i++)
{
int Max = a[i][0];
for (int j=0; j<cot; j++)
{
Max = (Max>a[i][j])?Max:a[i][j];
}
printf("\nDong %d: ",i) ;
printf("Gia tri max %d",Max);
}
}
373 Tìm giá trị nhỏ nhất trên 1 cột void LietKe(int a[][100], int cot, int dong)
{
for (int i=0; i<cot;i++)
{
int Min = a[0][i];
for (int j=0; j<dong; j++)
{
Min = (Min<a[j][i])?Min:a[j][i];
}
printf("\nCot %d: ",i) ;
printf("Gia tri min %d",Min);
}
}
374 Tìm số nguyên tố đầu tiên int SoNguyenTo(int a)
{
if (a<=1)
{
return 0;
}
for (int i=2; i<a; i++)
{
if (a%i==0)
{
return 0;
}
}
return 1;
}
int GiaTriCanTim(int a[][100], int cot, int dong)
{
for (int i=0; i<dong; i++)
{
for(int j=0; j<cot; j++)
{
if (SoNguyenTo(a[i][j])==1)
{
return a[i][j];
}
}
}
return -1;
}
375 Tìm số chẵn lớn nhất int ChanDauTien(int a[][100], int cot, int dong)
{
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (a[i][j]%2==0)
{
return a[i][j];
}
}
}
return -1;
}
int GiaTriCanTim(int a[][100], int cot, int dong)
{
int ChanMax = ChanDauTien(a,cot,dong);
if (ChanMax == -1)
{
return -1;
}
for (int i=0; i<dong;i++)
{
for (int j=0; j<cot; j++)
{
if (a[i][j]%2==0)
{
ChanMax = (ChanMax>a[i][j])?ChanMax:a[i][j];
}
}
}
return ChanMax;
}
376 Tìm số dương nhỏ nhất int DuongDauTien(int a[][100], int cot, int dong)
{
for (int i=0; i<dong; i++)
{
for (int j=0; j<cot; j++)
{
if (a[i][j]>0)
{
return a[i][j];
}
}
}
return -1;
}
int GiaTriCanTim(int a[][100], int cot, int dong)
{
int DuongMin = DuongDauTien(a,cot,dong);
if (DuongMin == -1)
{
return -1;
}
for (int i=0; i<dong;i++)
{
for (int j=0; j<cot; j++)
{
if (a[i][j]>0)
{
DuongMin = (DuongMin<a[i][j])?DuongMin:a[i][j];
}
}
}
return DuongMin;
}
377 Tìm số nguyên tố lớn 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; } int SoNguyenToDauTien(int a[][100], int cot, int dong) { for (int i=0; i<dong; i++) { for (int j=0; j<cot; j++) { if (SoNguyenTo(a[i][j])==1) { return a[i][j]; } } } return -1; } int GiaTriCanTim(int a[][100], int cot, int dong) { int SoNguyenToMax = SoNguyenToDauTien(a,cot,dong); if (SoNguyenToMax == -1) { return -1; } for (int i=0; i<dong;i++) { for (int j=0; j<cot; j++)
{ if (SoNguyenTo(a[i][j])==1) { SoNguyenToMax = (SoNguyenToMax>a[i][j])?SoNguyenToMax:a[i][j]; } } } return SoNguyenToMax; }
378 Tìm 1 chữ số xuất hiện nhiều nhất void ChuSo(int n, int b[])
{
int DonVi;
n = abs(n);
do
{
DonVi = n%10;
b[DonVi]++;
n=n/10;
} while (n>0);
}
int 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;
}
}
return ChuSoNhieuNhat;
}
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("\nDong %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("\nCot %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("\nDong %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("\nDong %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("\nDong %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("\nCot %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++)
{
a[i][j] = a[i+1][j];
}
}
dong--;
}
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++)
{
a[j][i] = a[j][i+1];
}
}
cot--;
}
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("\n");
}
}
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("\n");
}
}
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("\n");
}
}
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("\n");
}
}
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("\n");
}
}
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])
{
int temp = a[i][j];
a[i][j] = a[i][k];
a[i][k] = temp;
}
}
else
{
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])
{
int temp = a[j][i];
a[j][i] = a[k][i];
a[k][i] = temp;
}
}
else
{
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 thê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 thê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;
}
}
if (h==cot)
d=1;
}
d=0;
}
}
}
}
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;
}
}
if (h==cot)
d=1;
}
d=0;
}
}
}
}
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("\n\tMa tran vua nhap vao: \n");
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("\n\tMa tran xoan oc:\n");
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------------------------\n");
for (int i=0,stt = 0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", Mang[stt]);
stt++;
}
printf("\n");
}
printf("\t------------------------\n");
}
void SapXepMang1Chieu(int Mang[], int cot, int dong)
{
int temp;
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++)
{
MaTranXoanOc[i][j] = Mang[dem];
dem++;
}
j--;
for (i++; i< dong - Tru; i++ )
{
MaTranXoanOc[i][j] = Mang[dem];
dem++;
}
i--;
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------------------------\n");
for (int i=0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
printf("\t------------------------\n");
}
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("\n\tMa tran vua nhap vao: \n");
XuatMangThayMaTran(Mang,cot,dong);
SapXepMang1Chieu(Mang,cot,dong);
int MaTranZicZac[10][10];
ThietLapMaTranZicZac(Mang,MaTranZicZac,cot,dong);
printf("\n\tMa tran Zic Zac:\n");
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------------------------\n");
for (int i=0,stt = 0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", Mang[stt]);
stt++;
}
printf("\n");
}
printf("\t------------------------\n");
}
void SapXepMang1Chieu(int Mang[], int cot, int dong)
{
int temp;
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++)
{
MaTranZicZac[i][j] = Mang[dem]; dem++;
}
j++;
i--;
if (dem == cot*dong)
{
return;
}
for (i; i>-1; i--)
{
MaTranZicZac[i][j] = Mang[dem]; dem++;
}
i++;
j++;
} while (dem != cot*dong);
}
void XuatMaTran(int a[][10], int cot,int dong)
{
printf("\t------------------------\n");
for (int i=0; i<dong; i++)
{
printf("\t");
for (int j=0; j<cot; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
printf("\t------------------------\n");
}
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 i;
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----------------
Friday, 26 August 2011
THDC
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment